Composition Monad
Tom Pledger
Tom.Pledger@peace.com
Mon, 18 Feb 2002 15:52:38 +1300
Andre W B Furtado writes:
 Roughly speaking, I'm in need of a monad (say MyIO) that interprets the
 following code

 >f :: MyIO ()
 >f = do
 > action1
 > action2
 > action3
 > ...
 > return ()


 as applying action1 to g, then action2 to the SAME g (not the result of
 action1) and so on...

 Of course, this "g" will be specified when starting the monad (something
 like "runMyIO g"). Does this "composition monad" already exist? If no, can
 anyone give me some hints to create my own?
I think it's called a reader monad or an environment monad. Here's a
fairly simple version:
instance Monad ((>) env) where
return x = \env > x
m >>= f = \env > f (m env) env