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