X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=RWST.dcl;h=582bb0de8b3dec7e3ad276f140d0c3279effaee4;hb=e01254ee33ddd811fe95ea98cba19909f3e4f740;hp=1a5b3b2b60c586b20430f21e0b1c8e624a581a32;hpb=e402533a984929c6cd9a27efbc144313b7c33c8e;p=cc1516.git diff --git a/RWST.dcl b/RWST.dcl index 1a5b3b2..582bb0d 100644 --- a/RWST.dcl +++ b/RWST.dcl @@ -2,19 +2,28 @@ definition module RWST from Control.Applicative import class Applicative from Control.Monad import class Monad -from Data.Void import :: Void +from Control.Monad.Trans import class MonadTrans from Data.Functor import class Functor from Data.Functor.Identity import :: Identity from Data.Monoid import class Monoid, class Semigroup +// The RWS monad :: RWS r w s a :== RWST r w s Identity a +rws :: (r -> s -> (a, s, w)) -> RWS r w s a +runRWS :: (RWS r w s a) r s -> (a, s, w) +evalRWS :: (RWS r w s a) r s -> (a, w) +execRWS :: (RWS r w s a) r s -> (s, w) +mapRWS :: ((a, s, w) -> (b, s, w`)) (RWS r w s a) -> RWS r w` s b +withRWS :: (r` s -> (r, s)) (RWS r w s a) -> RWS r` w s a + // The RWST monad transformer :: RWST r w s m a = RWST (r s -> m (a, s, w)) instance Functor (RWST r w s m) | Monad m & Monoid w instance Applicative (RWST r w s m) | Monad m & Monoid w instance Monad (RWST r w s m) | Monad m & Monoid w +instance MonadTrans (RWST r w s) | Monoid w runRWST :: (RWST r w s m a) r s -> m (a, s, w) evalRWST :: (RWST r w s m a) r s -> m (a, w) | Monad m @@ -28,7 +37,7 @@ local :: (r -> r) (RWST r w s m a) -> RWST r w s m a | Monoid w & Monad m asks :: (r -> a) -> RWST r w s m a | Monoid w & Monad m // Writer operations -tell :: w -> RWST r w s m Void | Monoid w & Monad m +tell :: w -> RWST r w s m () | Monoid w & Monad m listen :: (RWST r w s m a) -> RWST r w s m (a, w) | Monoid w & Monad m pass :: (RWST r w s m (a, w -> w)) -> RWST r w s m a | Monoid w & Monad m listens :: (w -> b) (RWST r w s m a) -> RWST r w s m (a, b)| Monoid w & Monad m @@ -36,8 +45,8 @@ censor :: (w -> w) (RWST r w s m a) -> RWST r w s m a | Monoid w & Monad m // State operations get :: RWST r w s m s | Monoid w & Monad m -put :: s -> RWST r w s m Void | Monoid w & Monad m -modify :: (s -> s) -> RWST r w s m Void | Monoid w & Monad m +put :: s -> RWST r w s m () | Monoid w & Monad m +modify :: (s -> s) -> RWST r w s m () | Monoid w & Monad m gets :: (s -> a) -> RWST r w s m a | Monoid w & Monad m // Lifting other operations