On 1/1/07, Yitzchak Gale <[EMAIL PROTECTED]> wrote:
stToState :: MonadState st m => (STRef s st -> ST s a) -> m a
That would make it very convenient, for example, to
use arrays inside a pure state monad.
The type signatures above do ensure (as far as I can see)
that the opacity of the ST state thread is not violated. But
unfortunately, the protective shield in runST created by the
higher-rank polymorphism is too thick.
Probably,
stToState :: MonadState st m => (forall s. STRef s st -> ST s a) -> m a
E.g.
stToState :: MonadState st m => (forall s. STRef s st -> ST s a) -> m a
stToState f = do
s <- get
let (x, s') = runST (do
r <- newSTRef s
x <- f r
s' <- readSTRef r
return (x, s'))
put s'
return x
--
Best regerds,
Tolik
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe