[Haskell-cafe] stack overflow when using ST monad

Bulat Ziganshin bulat.ziganshin at gmail.com
Thu Aug 24 13:07:42 EDT 2006


Hello Brian,

Thursday, August 24, 2006, 4:16:41 PM, you wrote:

> I would make all the fields strict here, to be sure that no lazyness can
> creep about unseen eg:

>      data Tag s = Tag {
>          tagID :: !Int,
>          state :: !(STRef s TagState),
>          count :: !(STRef s Integer)
>    }

perhaps better:

      data Tag s = Tag {
          tagID :: !Int,
          state :: STRef s !TagState,
          count :: STRef s !Integer
    }

although i don't even sure that this will compile (in this case we can
request it as wishful feature). in theory, this should allow to omit
'$!' from writeRef calls

also, one can implement strict write operations:

writeRef r x = writeSTRef r $! x

or use my unboxed references (but not with Integer) -
http://haskell.org/haskellwiki/Library/ArrayRef 


-- 
Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com



More information about the Haskell-Cafe mailing list