-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Typeclasses for representing monad transformer unlifting
--   
--   See README.md
@package monad-unlift-ref
@version 0.2.1


-- | An implementation of <tt>RWST</tt> built on top of mutable references,
--   providing a proper monad morphism.
--   
--   An additional advantage of this transformer over the standard
--   <tt>RWST</tt> transformers in the transformers package is that it does
--   not have space leaks in the writer component. For more information,
--   see
--   <a>https://mail.haskell.org/pipermail/libraries/2012-October/018599.html</a>.
--   
--   Please see the documentation at
--   <a>https://www.stackage.org/package/monad-unlift</a> for more details
--   on using this module.
module Control.Monad.Trans.RWS.Ref

data RWSRefT refw refs r w s m a

runRWSRefT :: (Monad m, w ~ RefElement (refw w), s ~ RefElement (refs s), MCState (refw w) ~ PrimState b, MCState (refs s) ~ PrimState b, MonadBase b m, MutableRef (refw w), MutableRef (refs s), PrimMonad b, Monoid w) => RWSRefT refw refs r w s m a -> r -> s -> m (a, s, w)

runRWSIORefT :: (Monad m, RealWorld ~ PrimState b, MonadBase b m, PrimMonad b, Monoid w) => RWSRefT IORef IORef r w s m a -> r -> s -> m (a, s, w)

runRWSSTRefT :: (Monad m, ps ~ PrimState b, MonadBase b m, PrimMonad b, Monoid w) => RWSRefT (STRef ps) (STRef ps) r w s m a -> r -> s -> m (a, s, w)
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance GHC.Base.Monad m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance (Data.Mutable.Class.MCState (refw w) ~ Control.Monad.Primitive.PrimState b, GHC.Base.Monad m, w ~ Data.Mutable.Class.RefElement (refw w), Data.Mutable.Class.MutableRef (refw w), Control.Monad.Primitive.PrimMonad b, Control.Monad.Base.MonadBase b m, GHC.Base.Monoid w) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance (Data.Mutable.Class.MCState (refs s) ~ Control.Monad.Primitive.PrimState b, GHC.Base.Monad m, s ~ Data.Mutable.Class.RefElement (refs s), Data.Mutable.Class.MutableRef (refs s), Control.Monad.Primitive.PrimMonad b, Control.Monad.Base.MonadBase b m) => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance (Data.Mutable.Class.MCState (refw w) ~ Control.Monad.Primitive.PrimState b, Data.Mutable.Class.MCState (refs s) ~ Control.Monad.Primitive.PrimState b, GHC.Base.Monad m, w ~ Data.Mutable.Class.RefElement (refw w), s ~ Data.Mutable.Class.RefElement (refs s), Data.Mutable.Class.MutableRef (refw w), Data.Mutable.Class.MutableRef (refs s), Control.Monad.Primitive.PrimMonad b, Control.Monad.Base.MonadBase b m, GHC.Base.Monoid w) => Control.Monad.RWS.Class.MonadRWS r w s (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance Control.Monad.Base.MonadBase b m => Control.Monad.Base.MonadBase b (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance Control.Monad.Trans.Control.MonadTransControl (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s)
instance Control.Monad.Trans.Control.MonadBaseControl b m => Control.Monad.Trans.Control.MonadBaseControl b (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)
instance Control.Monad.Trans.Resource.Internal.MonadResource m => Control.Monad.Trans.Resource.Internal.MonadResource (Control.Monad.Trans.RWS.Ref.RWSRefT refw refs r w s m)


-- | An implementation of <tt>StateT</tt> built on top of mutable
--   references, providing a proper monad morphism.
--   
--   Please see the documentation at
--   <a>https://www.stackage.org/package/monad-unlift</a> for more details
--   on using this module.
module Control.Monad.Trans.State.Ref

data StateRefT ref s m a

runStateRefT :: (Monad m, s ~ RefElement (ref s), MCState (ref s) ~ PrimState b, MonadBase b m, MutableRef (ref s), PrimMonad b) => StateRefT ref s m a -> s -> m (a, s)

runStateIORefT :: (Monad m, RealWorld ~ PrimState b, MonadBase b m, PrimMonad b) => StateRefT IORef s m a -> s -> m (a, s)

runStateSTRefT :: (Monad m, ps ~ PrimState b, MonadBase b m, PrimMonad b) => StateRefT (STRef ps) s m a -> s -> m (a, s)
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance (Data.Mutable.Class.MCState (ref s) ~ Control.Monad.Primitive.PrimState b, GHC.Base.Monad m, s ~ Data.Mutable.Class.RefElement (ref s), Data.Mutable.Class.MutableRef (ref s), Control.Monad.Primitive.PrimMonad b, Control.Monad.Base.MonadBase b m) => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.State.Ref.StateRefT ref s)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance Control.Monad.Base.MonadBase b m => Control.Monad.Base.MonadBase b (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance Control.Monad.Trans.Control.MonadTransControl (Control.Monad.Trans.State.Ref.StateRefT ref s)
instance Control.Monad.Trans.Control.MonadBaseControl b m => Control.Monad.Trans.Control.MonadBaseControl b (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Monad.Trans.State.Ref.StateRefT ref s m)
instance Control.Monad.Trans.Resource.Internal.MonadResource m => Control.Monad.Trans.Resource.Internal.MonadResource (Control.Monad.Trans.State.Ref.StateRefT ref s m)


-- | An implementation of <tt>WriterT</tt> built on top of mutable
--   references, providing a proper monad morphism.
--   
--   An additional advantage of this transformer over the standard
--   <tt>WriterT</tt> transformers in the transformers package is that it
--   does not have space leaks. For more information, see
--   <a>https://mail.haskell.org/pipermail/libraries/2012-October/018599.html</a>.
--   
--   Please see the documentation at
--   <a>https://www.stackage.org/package/monad-unlift</a> for more details
--   on using this module.
module Control.Monad.Trans.Writer.Ref

data WriterRefT ref w m a

runWriterRefT :: (Monad m, w ~ RefElement (ref w), MCState (ref w) ~ PrimState b, MonadBase b m, MutableRef (ref w), PrimMonad b, Monoid w) => WriterRefT ref w m a -> m (a, w)

runWriterIORefT :: (Monad m, RealWorld ~ PrimState b, MonadBase b m, PrimMonad b, Monoid w) => WriterRefT IORef w m a -> m (a, w)

runWriterSTRefT :: (Monad m, ps ~ PrimState b, MonadBase b m, PrimMonad b, Monoid w) => WriterRefT (STRef ps) w m a -> m (a, w)
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance (Data.Mutable.Class.MCState (ref w) ~ Control.Monad.Primitive.PrimState b, GHC.Base.Monad m, w ~ Data.Mutable.Class.RefElement (ref w), Data.Mutable.Class.MutableRef (ref w), Control.Monad.Primitive.PrimMonad b, Control.Monad.Base.MonadBase b m, GHC.Base.Monoid w) => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Writer.Ref.WriterRefT ref w)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance Control.Monad.Base.MonadBase b m => Control.Monad.Base.MonadBase b (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance Control.Monad.Trans.Control.MonadTransControl (Control.Monad.Trans.Writer.Ref.WriterRefT ref w)
instance Control.Monad.Trans.Control.MonadBaseControl b m => Control.Monad.Trans.Control.MonadBaseControl b (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
instance Control.Monad.Trans.Resource.Internal.MonadResource m => Control.Monad.Trans.Resource.Internal.MonadResource (Control.Monad.Trans.Writer.Ref.WriterRefT ref w m)
