cmonad-0.1.0.0: src/Language/CMonad/MonadRef.hs
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
module Language.CMonad.MonadRef where
import Data.IORef
import Data.STRef
import Control.Monad.ST(ST)
class (Monad m) => MonadRef m r | m -> r, r -> m where
newRef :: a -> m (r a)
readRef :: r a -> m a
writeRef :: r a -> a -> m ()
instance MonadRef IO IORef where
{-# INLINE newRef #-}
newRef = newIORef
{-# INLINE readRef #-}
readRef = readIORef
{-# INLINE writeRef #-}
writeRef = writeIORef
instance MonadRef (ST s) (STRef s) where
{-# INLINE newRef #-}
newRef = newSTRef
{-# INLINE readRef #-}
readRef = readSTRef
{-# INLINE writeRef #-}
writeRef = writeSTRef