
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@gmail.com