In article <[EMAIL PROTECTED]>, Dave Menendez <[EMAIL PROTECTED]> wrote:
> This is one of the motivating examples for associated types. You would > define Ref as, > > class (Monad m) => Ref m where > data Ref m a > > newRef :: a -> m (Ref m a) > readRef :: Ref m a -> m a > writeRef :: Ref m a -> a -> m () > > This declares a one-to-one relation between "m" and "Ref m". That is, > you are guaranteed that Ref (ST s1) == Ref (ST s2) iff s1 == s2. You can also do it without associated types or MPTCs: data Ref m a = MkRef { readRef :: m a writeRef :: a -> m () } class (Monad m) => Ref m where newRef :: a -> m (Ref m a) This is also more general. -- Ashley Yakeley, Seattle WA WWEWDD? http://www.cs.utexas.edu/users/EWD/ _______________________________________________ Haskell-prime mailing list Haskell-prime@haskell.org http://haskell.org/mailman/listinfo/haskell-prime