Changeset 6672 for src/Pugs/Monads.hs
- Timestamp:
- 09/03/05 20:41:00 (3 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Monads.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Monads.hs
r5890 r6672 18 18 enterBlock, enterSub, 19 19 evalVal, tempVar, 20 21 MaybeT, runMaybeT, 20 22 21 23 module Control.Monad.RWS … … 26 28 import Pugs.Types 27 29 import Control.Monad.RWS 30 31 32 newtype MaybeT m a = MaybeT { runMaybeT :: m (Maybe a) } 33 34 instance (Monad m) => Monad (MaybeT m) where 35 (MaybeT mon) >>= f = 36 MaybeT (mon >>= maybe (return Nothing) (runMaybeT . f)) 37 return = MaybeT . return . Just 38 39 instance MonadTrans MaybeT where 40 lift mon = MaybeT (mon >>= return . Just) 41 42 instance (Monad m) => MonadPlus (MaybeT m) where 43 mzero = MaybeT (return Nothing) 44 mplus (MaybeT a) (MaybeT b) = MaybeT $ do 45 ma <- a 46 mb <- b 47 return $ ma `mplus` mb 48 28 49 29 50 {-|
