At 2002-02-07 01:19, Simon Peyton-Jones wrote: >1. Have a single built-in type (Ref), rather than two (IORef and >STRef). >I don't see how that can be anything other than a Good Thing, can it?
The problem is that your Ref type is primitive, which means users wouldn't be able to create their own Refs. I suppose the user could create a Ref2 type, but wouldn't it be easier to do this: data Ref m a = MkRef { get :: m a, set :: a -> m () }; class RefMonad m where newRef :: a -> m (Ref m a) This has the advantage of not changing existing library code, only adding to it. It works out the same for the user as your proposal, only more general. The kind of generalisation you are proposing is, in my opinion, best done explicitly by Haskell. Primitive functions and types should be as simple, concrete and primitive as possible. Let Haskell do the clever generalisation stuff. -- Ashley Yakeley, Seattle WA _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell