State Transformer
Jorge Adriano
jadrian@mat.uc.pt
Fri, 11 Jan 2002 22:59:58 +0000
> I agree with you. My work-around is then to define foo and bar locally
> to testfunc, in the scope of r:
>
> testfunc = do
> r <- newSTRef ('x',0)
> let foo = do
> (c,n) <- readSTRef r
> writeSTRef r ('a', n+1)
> bar = do
> (c,n) <- readSTRef r
> writeSTRef r (c,n+2)
> foo
> bar
> (c,n) <- readSTRef r
> return n
Thought about that to... but it looks kind of... terribly ugly (sorry :)
> But if this looks like unsatisfactory (it does to me, too), perhaps
> you have to go back to DIY monads.
DIY? what does that means?
> DIY monads are good when: you fix the state variables, you don't want
> to mention them in subprogram parameters.
Yeap!
> The ST monad is good when: you create more state variables on the fly,
> you use mutable arrays, you don't want to write your own monad and
> put/get commands.
What if you want both and keep nice clean(*) programming style... :-)
J.A.
(*) Clean as in "not dirty", not Clean the FL.