Reference types

Ashley Yakeley
Thu, 7 Feb 2002 02:09:12 -0800

At 2002-02-07 01:19, Simon Peyton-Jones wrote:

>1.  Have a single built-in type (Ref), rather than two (IORef and
>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 

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