-- 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: <tt>reference</tt>, <tt>ref-mtl</tt>,
--   <tt>ref-fd</tt>, <tt>ref-tf</tt>.
@package data-ref
@version 0.0.1.1

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)
