[Haskell-cafe] Re: Monad.Reader with updates
Mauricio
briqueabraque at yahoo.com
Thu Nov 6 09:18:42 EST 2008
>>>> 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"?
>>>
> 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)" ? (...)
>
I understand. But do you think something like the (obviously not
working) code below could respect monad laws, if I could consider
(environment->a) a monad over a?
update = snd . next ; -- this updates a random number generator
instance RandomGen environment => Monad ( environment -> a ) where {
-- below, f :: g1 -> ( environment -> g2 )
p >>= f = p2 where { p2 e = ( f . p $ e ) . update } ;
return = const ;
}
Then I would do something like:
getStdGen >>= ( return . do { a >>= b >>= c } )
>
> So I think you'd have to make the steps explicit. (...)
>
> advance :: m () -- your primitive which changes the environment
>
> a >>* b = a >> advance >> b
> a >>*= f = do { r <- a; advance; f r }
>
The problem is that I need 'a' or 'b' above to sometimes also change the
environment. I think with this method I could not get that.
Thanks,
Maurício
More information about the Haskell-Cafe
mailing list