ghc-lib-8.8.4.20210620: The GHC API, decoupled from GHC versions
Copyright(c) Dan Doel
LicenseBSD3
Maintainerdan.doel@gmail.com
Stabilityexperimental
Portabilitynon-portable (multi-parameter type classes)
Safe HaskellSafe-Inferred
LanguageHaskell2010

ListT

Description

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/ListT-icfp2005.pdf).

Synopsis

Documentation

newtype ListT m a Source #

A monad transformer for performing backtracking computations layered over another monad m

Constructors

ListT 

Fields

  • unListT :: forall r. (a -> m r -> m r) -> m r -> m r
     

Instances

Instances details
Monad (ListT m) Source # 
Instance details

Defined in ListT

Methods

(>>=) :: ListT m a -> (a -> ListT m b) -> ListT m b #

(>>) :: ListT m a -> ListT m b -> ListT m b #

return :: a -> ListT m a #

Functor (ListT f) Source # 
Instance details

Defined in ListT

Methods

fmap :: (a -> b) -> ListT f a -> ListT f b #

(<$) :: a -> ListT f b -> ListT f a #

MonadFail (ListT m) Source # 
Instance details

Defined in ListT

Methods

fail :: String -> ListT m a #

Applicative (ListT f) Source # 
Instance details

Defined in ListT

Methods

pure :: a -> ListT f a #

(<*>) :: ListT f (a -> b) -> ListT f a -> ListT f b #

liftA2 :: (a -> b -> c) -> ListT f a -> ListT f b -> ListT f c #

(*>) :: ListT f a -> ListT f b -> ListT f b #

(<*) :: ListT f a -> ListT f b -> ListT f a #

Alternative (ListT f) Source # 
Instance details

Defined in ListT

Methods

empty :: ListT f a #

(<|>) :: ListT f a -> ListT f a -> ListT f a #

some :: ListT f a -> ListT f [a] #

many :: ListT f a -> ListT f [a] #

MonadPlus (ListT m) Source # 
Instance details

Defined in ListT

Methods

mzero :: ListT m a #

mplus :: ListT m a -> ListT m a -> ListT m a #

runListT :: ListT m a -> (a -> m r -> m r) -> m r -> m r Source #

Runs a ListT computation with the specified initial success and failure continuations.

select :: Monad m => [a] -> ListT m a Source #

fold :: ListT m a -> (a -> m r -> m r) -> m r -> m r Source #