1 module Control.Monad.X.Utils where
3 -- | This is a private module and is not to be imported
4 -- directly by non-library modules.
7 import Prelude(return,fail,(.))
8 import Control.Monad(MonadPlus(..))
9 import Control.Monad.X.Trans
12 inBase' m = lift (inBase m)
15 return' x = lift (return x)
16 fail' msg = lift (fail msg)
19 ask' :: (MonadTrans t, MonadReader r m) => t m r
21 local' map f = map (local f)
24 tell' w = lift (tell w)
25 listen1' mk unmk add m = mk (do (x,w) <- listen (unmk m)
27 listen2' mk unmk add m = mk (\s -> do (x,w) <- listen (unmk m s)
31 get' :: (MonadTrans t, MonadState s m) => t m s
36 throwError' e = lift (throwError e)
37 catchError1' mk unmk m h = mk (catchError (unmk m) (unmk . h))
38 catchError2' mk unmk m h = mk (\y -> catchError (unmk m y) (\e -> unmk (h e) y))
41 mzero' :: (MonadTrans t, MonadPlus m) => t m a
43 mplus1' mk unmk m n = mk (mplus (unmk m) (unmk n))
44 mplus2' mk unmk m n = mk (\y -> unmk m y `mplus` unmk n y)
47 callCC1' mk unmk ret f = mk (callCC (\br -> unmk (f (\a -> lift (br (ret a))))))
48 callCC2' mk unmk ret f = mk (\s -> callCC (\br -> unmk (f (\a -> lift (br (ret a s)))) s))