-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Unify STRef and IORef in plain Haskell 98
--
-- This package provides a unique interface to both STRef and IORef. The
-- advantage is that it is plain Haskell 98, the disadvantage is that we
-- cannot use STRef and IORef as they are.
--
-- Our approach works with Haskell 98 single parameter type classes
-- because we use an explicit dictionary, and we do not pass the
-- references around but their accessors.
--
-- Similar packages: reference, ref-mtl,
-- ref-fd, ref-tf.
@package data-ref
@version 0.0.1.2
module Data.Ref
data T m a
Cons :: a -> m () -> m a -> T m a
[write] :: T m a -> a -> m ()
[read] :: T m a -> m a
modify :: C m => T m a -> (a -> a) -> m ()
newCons :: C m => (a -> m ref) -> (ref -> a -> m ()) -> (ref -> m a) -> a -> m (T m a)
class Monad m => C m
new :: C m => a -> m (T m a)
lift :: (Monad m, MonadTrans t) => T m a -> T (t m) a
liftIO :: (MonadIO m) => T IO a -> T m a
newLifted :: (C m, MonadTrans t) => a -> t m (T (t m) a)
instance Data.Ref.C GHC.Types.IO
instance Data.Ref.C (GHC.ST.ST s)
instance Data.Ref.C GHC.Conc.Sync.STM
instance Data.Ref.C m => Data.Ref.C (Control.Monad.Trans.Identity.IdentityT m)
instance Data.Ref.C m => Data.Ref.C (Control.Monad.Trans.Maybe.MaybeT m)
instance (Control.Monad.Trans.Error.Error e, Data.Ref.C m) => Data.Ref.C (Control.Monad.Trans.Error.ErrorT e m)
instance Data.Ref.C m => Data.Ref.C (Control.Monad.Trans.Except.ExceptT e m)
instance Data.Ref.C m => Data.Ref.C (Control.Monad.Trans.Cont.ContT r m)
instance Data.Ref.C m => Data.Ref.C (Control.Monad.Trans.Reader.ReaderT r m)
instance Data.Ref.C m => Data.Ref.C (Control.Monad.Trans.State.Strict.StateT s m)
instance Data.Ref.C m => Data.Ref.C (Control.Monad.Trans.State.Lazy.StateT s m)
instance (GHC.Base.Monoid w, Data.Ref.C m) => Data.Ref.C (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance (GHC.Base.Monoid w, Data.Ref.C m) => Data.Ref.C (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Base.Monoid w, Data.Ref.C m) => Data.Ref.C (Control.Monad.Trans.RWS.Strict.RWST r w s m)
instance (GHC.Base.Monoid w, Data.Ref.C m) => Data.Ref.C (Control.Monad.Trans.RWS.Lazy.RWST r w s m)