Gregory Wright wrote:
-- A structure with internal state:
--
data Tag s = Tag {
        tagID :: Int,
        state :: STRef s TagState,
        count :: STRef s Integer
}


data FrozenTag = FrozenTag {
        ft_tagID :: Int,
        ft_state :: TagState,
        ft_count :: Integer
} deriving Show

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)
  }

  -- ditto for FrozenTag

(And use (writeSTRef ref $! value) as others have suggested)

Regards, Brian.
--
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.

http://www.metamilk.com
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to