Mauricio wrote:
Is there some abstraction in current ghc library
that implements something like Reader, but where
the value of the environment is updated at every
"step"?
do-it-yourself? you can start from reader definition and add what you
need. you just need to make "initial state" consisting from state
itself and update function so `run` will have just one initialization
argument
Sure. I've done a few versions, trying to change
the way (>>=) is defined, and learned a lot with
that. But I wanted to know if there's already the
"right way to do it" instead of my "newbie way to
do it" :)
It doesn't quite make sense, because one "step" isn't well defined.
How many "steps" is "return (f x)" ? how about "return x >>= \y ->
return (f y)" ?
Because the monad laws guarantee those two things should be the same,
and yet the first is zero steps and the second is one step, going by the
crude "counting >>=s" method I'm guess you were thinking of.
So I think you'd have to make the steps explicit.
You could do this with a custom version of (>>) and (>>=) which
automatically do a step, for example.
So
advance :: m () -- your primitive which changes the environment
a >>* b = a >> advance >> b
a >>*= f = do { r <- a; advance; f r }
Does that help?
Jules
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe