
Hello Manuel, Sunday, March 19, 2006, 7:25:44 PM, you wrote:
i had a class which defines "default" reference type for monads:
class Ref m r | m->r where
to be exact, class Ref m r | m->r, r->m where
newRef :: a -> m (r a) readRef :: r a -> m a writeRef :: r a -> a -> m ()
or even worser: class Ref2 m r a | m a->r, r->m instance (Unboxed a) => Ref2 IO IOURef a instance (!Unboxed a) => Ref2 IO IORef a instance (Unboxed a) => Ref2 (ST s) (STURef s) a instance (!Unboxed a) => Ref2 (ST s) (STRef s) a MMTC> My statement remains: Why use a relational notation if you can have a MMTC> functional one? how about these examples? MMTC> class Monad m => RefMonad m where MMTC> type Ref m :: * -> * can i use `Ref` as type function? for example: data StrBuffer m = StrBuffer (Ref m Int) (Ref m String) -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com