X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Futils%2FMaybes.lhs;h=d4f8346f1495cb003b6b89cc49abbe715e96c13c;hb=cee4bfd3a0c0852946966333bbff47654e9e35b2;hp=1d43365dce467b2e9291027b75dd34f393c7ed85;hpb=da6f25437e59e97791a1fea7ce2f9ce4dccc57f6;p=ghc-hetmet.git diff --git a/compiler/utils/Maybes.lhs b/compiler/utils/Maybes.lhs index 1d43365..d4f8346 100644 --- a/compiler/utils/Maybes.lhs +++ b/compiler/utils/Maybes.lhs @@ -17,6 +17,7 @@ module Maybes ( expectJust, maybeToBool, + MaybeT(..) ) where import Data.Maybe @@ -82,6 +83,26 @@ orElse :: Maybe a -> a -> a Nothing `orElse` y = y \end{code} +%************************************************************************ +%* * +\subsection[MaybeT type]{The @MaybeT@ monad transformer} +%* * +%************************************************************************ + +\begin{code} + +newtype MaybeT m a = MaybeT {runMaybeT :: m (Maybe a)} + +instance Functor m => Functor (MaybeT m) where + fmap f x = MaybeT $ fmap (fmap f) $ runMaybeT x + +instance Monad m => Monad (MaybeT m) where + return = MaybeT . return . Just + x >>= f = MaybeT $ runMaybeT x >>= maybe (return Nothing) (runMaybeT . f) + fail _ = MaybeT $ return Nothing + +\end{code} + %************************************************************************ %* *