%
+% (c) The University of Glasgow 2006
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
-\section[Maybes]{The `Maybe' types and associated utility functions}
\begin{code}
module Maybes (
- module Maybe, -- Re-export all of Maybe
+ module Data.Maybe, -- Re-export all of Maybe
MaybeErr(..), -- Instance of Monad
- failME,
+ failME, isSuccess,
orElse,
mapCatMaybes,
expectJust,
maybeToBool,
- thenMaybe, seqMaybe, returnMaybe, failMaybe
+ thenMaybe, seqMaybe, returnMaybe, failMaybe, fmapMMaybe
) where
#include "HsVersions.h"
-import Maybe
-
+import Data.Maybe
infixr 4 `orElse`
\end{code}
orElse :: Maybe a -> a -> a
(Just x) `orElse` y = x
Nothing `orElse` y = y
+
+fmapMMaybe :: Monad m => (a -> m b) -> Maybe a -> m (Maybe b)
+fmapMMaybe f Nothing = return Nothing
+fmapMMaybe f (Just x) = f x >>= \x' -> return (Just x')
+
\end{code}
Succeeded v >>= k = k v
Failed e >>= k = Failed e
+isSuccess :: MaybeErr err val -> Bool
+isSuccess (Succeeded {}) = True
+isSuccess (Failed {}) = False
+
failME :: err -> MaybeErr err val
failME e = Failed e
\end{code}