4 Jun
2003
4 Jun
'03
2:12 a.m.
In article <0ede01c3265e$4736c960$8476a841@TIMDELL>, "Tim Sweeney" <tim@epicgames.com> wrote:
class Monad m => RefMonad m r | m -> r where newRef :: a -> m (r a) readRef :: r a -> m a writeRef :: r a -> a -> m ()
Is it possible to actually implement a working instance of RefMonad in Haskell, without making use of a built-in monad like IO or ST? If so, I'd love any tips -- I've been making good use of monads for a while, but can't figure this one out.
You certainly wouldn't be able to do this for any monad M which had: performM :: forall a. M a -> a; ...because it wouldn't be type-safe: you'd be able to construct coerce :: a -> b just as you can with unsafePerformIO. -- Ashley Yakeley, Seattle WA