-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A backtracking logic-programming monad. -- -- A continuation-based, backtracking, logic programming monad. An -- adaptation of the two-continuation implementation found in the paper -- Backtracking, Interleaving, and Terminating Monad Transformers -- available here: http://okmij.org/ftp/papers/LogicT.pdf @package logict @version 0.2.3 -- | A backtracking, logic programming monad. -- -- Adapted from the paper /Backtracking, Interleaving, and Terminating -- Monad Transformers/, by Oleg Kiselyov, Chung-chieh Shan, Daniel P. -- Friedman, Amr Sabry -- (http://www.cs.rutgers.edu/~ccshan/logicprog/LogicT-icfp2005.pdf) module Control.Monad.Logic.Class -- | Minimal implementation: msplit class (MonadPlus m) => MonadLogic m msplit :: (MonadLogic m) => m a -> m (Maybe (a, m a)) interleave :: (MonadLogic m) => m a -> m a -> m a (>>-) :: (MonadLogic m) => m a -> (a -> m b) -> m b ifte :: (MonadLogic m) => m a -> (a -> m b) -> m b -> m b once :: (MonadLogic m) => m a -> m a -- | The inverse of msplit. Satisfies the following law: -- --
--   msplit m >>= reflect == m
--   
reflect :: (MonadLogic m) => Maybe (a, m a) -> m a instance (MonadLogic m, Monoid w) => MonadLogic (WriterT w m) instance (MonadLogic m, Monoid w) => MonadLogic (WriterT w m) instance (MonadLogic m) => MonadLogic (StateT s m) instance (MonadLogic m) => MonadLogic (StateT s m) instance (MonadLogic m) => MonadLogic (ReaderT e m) instance MonadLogic [] -- | A backtracking, logic programming monad. -- -- Adapted from the paper /Backtracking, Interleaving, and Terminating -- Monad Transformers/, by Oleg Kiselyov, Chung-chieh Shan, Daniel P. -- Friedman, Amr Sabry -- (http://www.cs.rutgers.edu/~ccshan/logicprog/LogicT-icfp2005.pdf). module Control.Monad.Logic -- | The basic Logic monad, for performing backtracking computations -- returning values of type a data Logic a -- | Runs a Logic computation with the specified initial success and -- failure continuations. runLogic :: Logic a -> (a -> r -> r) -> r -> r -- | Extracts the first result from a Logic computation. observe :: Logic a -> a -- | Extracts up to a given number of results from a Logic computation. observeMany :: Int -> Logic a -> [a] -- | Extracts all results from a Logic computation. observeAll :: Logic a -> [a] -- | A monad transformer for performing backtracking computations layered -- over another monad m data LogicT m a -- | Runs a LogicT computation with the specified initial success and -- failure continuations. runLogicT :: LogicT m a -> (a -> m r -> m r) -> m r -> m r -- | Extracts the first result from a LogicT computation, failing -- otherwise. observeT :: (Monad m) => LogicT m a -> m a -- | Extracts up to a given number of results from a LogicT computation. observeManyT :: (Monad m) => Int -> LogicT m a -> m [a] -- | Extracts all results from a LogicT computation. observeAllT :: (Monad m) => LogicT m a -> m [a] instance (MonadState s m) => MonadState s (LogicT m) instance (MonadReader r m) => MonadReader r (LogicT m) instance MonadLogic Logic instance MonadPlus Logic instance Monad Logic instance Alternative Logic instance Applicative Logic instance Functor Logic instance Traversable Logic instance Foldable Logic instance (Monad m) => MonadLogic (LogicT m) instance (MonadIO m) => MonadIO (LogicT m) instance MonadTrans LogicT instance (Monad m) => MonadPlus (LogicT m) instance (Monad m) => Monad (LogicT m) instance (Applicative f) => Alternative (LogicT f) instance (Applicative f) => Applicative (LogicT f) instance (Functor f) => Functor (LogicT f) instance Applicative Identity