1 implementation module rwst
3 from Data.Func import $
7 import Control.Applicative
12 :: RWST r w s m a = RWST (r s -> m (a, s, w))
14 runRWST :: (RWST r w s m a) r s -> m (a, s, w)
15 runRWST (RWST f) r s = f r s
17 instance Functor (RWST r w s m) | Monad m & Monoid w where
20 instance Applicative (RWST r w s m) | Monad m & Monoid w where
21 pure a = RWST \_ s->pure (a, s, mempty)
22 (<*>) mf mx = ap mf mx
24 instance Monad (RWST r w s m) | Monad m & Monoid w where
25 bind m k = RWST \r s->runRWST m r s
26 >>= \(a, s`, w)->runRWST (k a) r s`
27 >>= \(b, s``,w`)->pure (b, s``, mappend w w`)