-- 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.4.2 -- | 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 -- | Inverts a logic computation. If m succeeds with at least one -- value, lnot m fails. If m fails, then lnot -- m succeeds the value (). lnot :: MonadLogic m => m a -> m () 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 newtype Logic a Logic :: LogicT Identity a -> Logic a unLogic :: Logic a -> LogicT Identity 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 newtype LogicT m a LogicT :: (forall ans. SK (m ans) a -> FK (m ans) -> m ans) -> LogicT m a unLogicT :: LogicT m a -> forall ans. SK (m ans) a -> FK (m ans) -> m ans -- | 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 MonadError e m => MonadError e (LogicT m) 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)