[project @ 2004-08-30 15:43:14 by sof]
[ghc-hetmet.git] / ghc / compiler / utils / Maybes.lhs
index abaf1c1..961da18 100644 (file)
@@ -5,46 +5,31 @@
 
 \begin{code}
 module Maybes (
-       Maybe2(..), Maybe3(..),
+       module Maybe,           -- Re-export all of Maybe
+
        MaybeErr(..),
 
        orElse, 
-       mapMaybe,
+       mapCatMaybes,
        allMaybes,
        firstJust,
        expectJust,
        maybeToBool,
 
-       failMaB,
-       failMaybe,
-       seqMaybe,
-       returnMaB,
-       returnMaybe,
-       thenMaB,
-       catMaybes
+       thenMaybe, seqMaybe, returnMaybe, failMaybe, 
+
+       thenMaB, returnMaB, failMaB
+
     ) where
 
 #include "HsVersions.h"
 
-import Maybe( catMaybes, mapMaybe )
+import Maybe
 
 
 infixr 4 `orElse`
 \end{code}
 
-
-%************************************************************************
-%*                                                                     *
-\subsection[Maybe2,3 types]{The @Maybe2@ and @Maybe3@ types}
-%*                                                                     *
-%************************************************************************
-
-\begin{code}
-data Maybe2 a b   = Just2 a b   | Nothing2  deriving (Eq,Show)
-data Maybe3 a b c = Just3 a b c | Nothing3  deriving (Eq,Show)
-\end{code}
-
-
 %************************************************************************
 %*                                                                     *
 \subsection[Maybe type]{The @Maybe@ type}
@@ -83,20 +68,20 @@ firstJust (Nothing : ms) = firstJust ms
 \end{code}
 
 \begin{code}
-findJust :: (a -> Maybe b) -> [a] -> Maybe b
-findJust f []    = Nothing
-findJust f (a:as) = case f a of
-                     Nothing -> findJust f as
-                     b  -> b
-\end{code}
-
-\begin{code}
 expectJust :: String -> Maybe a -> a
 {-# INLINE expectJust #-}
 expectJust err (Just x) = x
 expectJust err Nothing  = error ("expectJust " ++ err)
 \end{code}
 
+\begin{code}
+mapCatMaybes :: (a -> Maybe b) -> [a] -> [b]
+mapCatMaybes f [] = []
+mapCatMaybes f (x:xs) = case f x of
+                         Just y  -> y : mapCatMaybes f xs
+                         Nothing -> mapCatMaybes f xs
+\end{code}
+
 The Maybe monad
 ~~~~~~~~~~~~~~~
 \begin{code}
@@ -104,6 +89,11 @@ seqMaybe :: Maybe a -> Maybe a -> Maybe a
 seqMaybe (Just x) _  = Just x
 seqMaybe Nothing  my = my
 
+thenMaybe :: Maybe a -> (a -> Maybe b) -> Maybe b
+thenMaybe ma mb = case ma of
+                   Just x  -> mb x
+                   Nothing -> Nothing
+
 returnMaybe :: a -> Maybe a
 returnMaybe = Just