State Transformer
Jorge Adriano
jadrian@mat.uc.pt
Fri, 11 Jan 2002 14:18:15 +0000
> Your example uses two state variables: a Char and an Int, paired up as
> a tuple. Below, I use one state variable of type (Char,Int) for that,
> as hinted by your first attempt at the translation. foo and bar will
> each need to take a parameter --- the reference to the state variable,
> due to the reference business.
>
> testfunc = do
> r <- newSTRef ('x',0)
> foo r
> bar r
> (c,n) <- readSTRef r
> return n
Yeap, I could do it like this myself :)
The whole problem is with passing the 'r' as a parameter, which is precisly
what I'm trying to avoid. I think I already understood how to use this monad.
Its pretty different from the monad state I was expecting, and as far as I
can see, to be used in distinct situations.
Thanks
J.A.
>
> foo r = do
> (c,n) <- readSTRef r
> writeSTRef r ('a', n+1)
>
> bar r = do
> (c,n) <- readSTRef r
> writeSTRef r (c,n+2)
>
> tryTestFunc = runST testfunc
>