Copyright | (c) Dan Doel |
---|---|
License | BSD3 |
Maintainer | Andrew Lelechenko <andrew.lelechenko@gmail.com> |
Safe Haskell | Safe |
Language | Haskell2010 |
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://okmij.org/ftp/papers/LogicT.pdf).
Synopsis
- module Control.Monad.Logic.Class
- type Logic = LogicT Identity
- logic :: (forall r. (a -> r -> r) -> r -> r) -> Logic a
- runLogic :: Logic a -> (a -> r -> r) -> r -> r
- observe :: Logic a -> a
- observeMany :: Int -> Logic a -> [a]
- observeAll :: Logic a -> [a]
- newtype LogicT m a = LogicT {
- unLogicT :: forall r. (a -> m r -> m r) -> m r -> m r
- runLogicT :: LogicT m a -> (a -> m r -> m r) -> m r -> m r
- observeT :: Monad m => LogicT m a -> m a
- observeManyT :: Monad m => Int -> LogicT m a -> m [a]
- observeAllT :: Monad m => LogicT m a -> m [a]
- module Control.Monad
- module Control.Monad.Trans
Documentation
module Control.Monad.Logic.Class
The Logic monad
type Logic = LogicT Identity Source #
The basic Logic monad, for performing backtracking computations
returning values of type a
.
logic :: (forall r. (a -> r -> r) -> r -> r) -> Logic a Source #
A smart constructor for Logic computations.
runLogic :: Logic a -> (a -> r -> r) -> r -> r Source #
Runs a Logic computation with the specified initial success and failure continuations.
observeMany :: Int -> Logic a -> [a] Source #
Extracts up to a given number of results from a Logic computation.
observeAll :: Logic a -> [a] Source #
Extracts all results from a Logic computation.
The LogicT monad transformer
A monad transformer for performing backtracking computations
layered over another monad m
.
Instances
runLogicT :: LogicT m a -> (a -> m r -> m r) -> m r -> m r Source #
Runs a LogicT computation with the specified initial success and failure continuations.
observeT :: Monad m => LogicT m a -> m a Source #
Extracts the first result from a LogicT computation, failing otherwise.
observeManyT :: Monad m => Int -> LogicT m a -> m [a] Source #
Extracts up to a given number of results from a LogicT computation.
observeAllT :: Monad m => LogicT m a -> m [a] Source #
Extracts all results from a LogicT computation.
module Control.Monad
module Control.Monad.Trans