-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Explicit Sharing of Monadic Effects -- -- This package implements a monad transformer for sharing monadic -- effects of monads for non-determinism. @package explicit-sharing @version 0.2 module Control.Monad.Sharing class (MonadPlus m) => Nondet m a mapNondet :: (Nondet m a) => (forall b. (Nondet m b) => m b -> m (m b)) -> a -> m a eval :: (Nondet m a) => a -> m a class (MonadPlus m) => Sharing m share :: (Sharing m, Nondet m a) => m a -> m (m a) shareRec :: (Sharing m, Nondet m a) => (m a -> m a) -> m (m a) module Control.Monad.Sharing.Lazy.ContReaderNoThunksInlined newtype Lazy m a Lazy :: (forall w. (a -> Bool -> Store -> m w) -> Bool -> Store -> m w) -> Lazy m a fromLazy :: Lazy m a -> forall w. (a -> Bool -> Store -> m w) -> Bool -> Store -> m w data Store Store :: Int -> (IntMap Untyped) -> Store runLazy :: (Monad m) => Lazy m a -> m a memo :: Lazy m a -> Lazy m (Lazy m a) instance (MonadPlus m) => Sharing (Lazy m) instance (MonadPlus m) => MonadPlus (Lazy m) instance (Monad m) => Monad (Lazy m) module Control.Monad.Sharing.Lazy data Lazy m a runLazy :: (Monad m) => Lazy m a -> m a evalLazy :: (Monad m) => (Nondet (Lazy m) a) => Lazy m a -> m a module Control.Monad.Sharing.Lazy.Simple newtype Lazy m a Lazy :: WriterT Shared (StateT ThunkStore m) a -> Lazy m a fromLazy :: Lazy m a -> WriterT Shared (StateT ThunkStore m) a runLazy :: (Monad m) => Lazy m a -> m a instance (Monad m) => Monad (Lazy m) instance (MonadPlus m) => MonadPlus (Lazy m) instance (Monad m) => MonadState ThunkStore (Lazy m) instance (Monad m) => MonadWriter Shared (Lazy m) instance (MonadPlus m) => Sharing (Lazy m) module Control.Monad.Trans.ContT newtype ContT m a ContT :: (forall w. (a -> m w) -> m w) -> ContT m a unContT :: ContT m a -> forall w. (a -> m w) -> m w runContT :: (Monad m) => ContT m a -> m a instance (Monad m) => MonadState s (ContT (ReaderT s m)) instance (MonadPlus m) => MonadPlus (ContT m) instance (Monad m) => Monad (ContT m) instance MonadTrans ContT module Control.Monad.Sharing.Lazy.ContReader type Env = (ThunkStore, Shared) newtype Lazy m a Lazy :: ContT (ReaderT Env m) a -> Lazy m a fromLazy :: Lazy m a -> ContT (ReaderT Env m) a runLazy :: (Monad m) => Lazy m a -> m a instance (MonadPlus m) => MonadPlus (Lazy m) instance (MonadPlus m) => Sharing (Lazy m) instance (Monad m) => MonadWriter Shared (Lazy m) instance (Monad m) => MonadState ThunkStore (Lazy m) instance (Monad m) => Monad (Lazy m) module Control.Monad.Sharing.Lazy.ContReaderNoThunks data Store Store :: Int -> (IntMap Untyped) -> Store getFreshKey :: (MonadState Store m) => m Int lookupHNF :: (MonadState Store m) => Int -> m (Maybe a) insertHNF :: (MonadState Store m) => Int -> a -> m () type Env = (Store, Shared) newtype Lazy m a Lazy :: ContT (ReaderT Env m) a -> Lazy m a fromLazy :: Lazy m a -> ContT (ReaderT Env m) a runLazy :: (Monad m) => Lazy m a -> m a memo :: (MonadState Store m, MonadWriter Shared m) => m a -> m (m a) instance (MonadPlus m) => MonadPlus (Lazy m) instance (MonadPlus m) => Sharing (Lazy m) instance (Monad m) => MonadWriter Shared (Lazy m) instance (Monad m) => MonadState Store (Lazy m) instance (Monad m) => Monad (Lazy m)