
30 Dec
2003
30 Dec
'03
8:13 p.m.
On Tue, Dec 30, 2003 at 08:28:11PM +0100, Tomasz Zielonka wrote:
On Wed, Dec 31, 2003 at 02:54:18AM +0900, Koji Nakahara wrote:
Hi,
I think the problem is in the State Monad itself; State Monad is lazy to compute its state.
I am not a haskell expert, and there may be better ideas. But anyhow, when I use these >>>= and >>> instead of >>= and >>, your example runs fine. I hope it becomes some help.
m >>>= k = State $ \s -> let (a, s') = runState m s in s `seq` runState (k a) s' -- force evaluation of the state
m >>> k = m >>>= \_ -> k
Ahh, right. So I didn't have to use UnboxedState. StrictState would do.
Thankyou both for your help, I wouldn't have thought of changing the State monad itself. I guess I've got lots more to learn :) - Joe