Hal Daume III writes: : | [1] i'm thinking of something like: | | class MonadRef m r | m -> r, r -> m where | newRef :: a -> m (r a) | readRef :: r a -> m a | writeRef :: r a -> a -> m () | updateRef :: (a -> a) -> r a -> m () This bears some resemblance to a lively thread back in February. Here's how it started: http://haskell.cs.yale.edu/pipermail/haskell/2002-February/008842.html