# State Transformer

**Ashley Yakeley
**
ashley@semantic.org

*Sat, 19 Jan 2002 15:43:53 -0800*

At 2002-01-19 08:16, Marcin 'Qrczak' Kowalczyk wrote:
>*Here is mine. The same code can work with MVars too, as long as the
*>*order of operations is consistent with the empty/full state. The
*>*empty/full state is real for MVars and imagined for IORef/STRef.
*
Could you simply the interface if you consider (MVar a) to hold a (Maybe
a)?
class Monad m => Ref m a r | r -> m a where
newRef :: a -> m r
getRef :: r -> m a
setRef :: r -> a -> m ()
modifyRef :: r -> (a -> m a) -> m ()
instance Ref (ST s) a (STRef s a) where
...
instance Ref IO a (IORef a) where
...
instance Ref IO (Maybe a) (MVar a) where
...
--
Ashley Yakeley, Seattle WA