From bc845b714132a897032502536fea8cd018ce325b Mon Sep 17 00:00:00 2001 From: Twan van Laarhoven Date: Thu, 17 Jan 2008 20:20:51 +0000 Subject: [PATCH] Added MaybeT monad transformer to utils/Maybes --- compiler/utils/Maybes.lhs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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} + %************************************************************************ %* * -- 1.7.10.4