Copyright | (c) Ross Paterson 2017 |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | R.Paterson@city.ac.uk |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell2010 |
Selection monad transformer, modelling search algorithms.
- Martin Escardo and Paulo Oliva. "Selection functions, bar recursion and backward induction", Mathematical Structures in Computer Science 20:2 (2010), pp. 127-168. https://www.cs.bham.ac.uk/~mhe/papers/selection-escardo-oliva.pdf
- Jules Hedges. "Monad transformers for backtracking search". In Proceedings of MSFP 2014. https://arxiv.org/abs/1406.2058
Synopsis
- type Select r = SelectT r Identity
- select :: ((a -> r) -> a) -> Select r a
- runSelect :: Select r a -> (a -> r) -> a
- mapSelect :: (a -> a) -> Select r a -> Select r a
- newtype SelectT r m a = SelectT ((a -> m r) -> m a)
- runSelectT :: SelectT r m a -> (a -> m r) -> m a
- mapSelectT :: (m a -> m a) -> SelectT r m a -> SelectT r m a
- selectToContT :: Monad m => SelectT r m a -> ContT r m a
The Select monad
select :: ((a -> r) -> a) -> Select r a Source #
Constructor for computations in the selection monad.
runSelect :: Select r a -> (a -> r) -> a Source #
Runs a Select
computation with a function for evaluating answers
to select a particular answer. (The inverse of select
.)
The SelectT monad transformer
newtype SelectT r m a Source #
Selection monad transformer.
SelectT
is not a functor on the category of monads, and many operations
cannot be lifted through it.
SelectT ((a -> m r) -> m a) |
Instances
MonadTrans (SelectT r) Source # | |
MonadFail m => MonadFail (SelectT r m) Source # | |
Defined in Control.Monad.Trans.Select | |
MonadIO m => MonadIO (SelectT r m) Source # | |
Defined in Control.Monad.Trans.Select | |
(Functor m, MonadPlus m) => Alternative (SelectT r m) Source # | |
(Functor m, Monad m) => Applicative (SelectT r m) Source # | |
Defined in Control.Monad.Trans.Select | |
Functor m => Functor (SelectT r m) Source # | |
Monad m => Monad (SelectT r m) Source # | |
MonadPlus m => MonadPlus (SelectT r m) Source # | |
Generic (SelectT r m a) Source # | |
type Rep (SelectT r m a) Source # | |
Defined in Control.Monad.Trans.Select type Rep (SelectT r m a) = D1 ('MetaData "SelectT" "Control.Monad.Trans.Select" "transformers-0.6.1.2-KquO3qiMMr21gbsKwWKH4A" 'True) (C1 ('MetaCons "SelectT" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ((a -> m r) -> m a)))) |
runSelectT :: SelectT r m a -> (a -> m r) -> m a Source #
Runs a SelectT
computation with a function for evaluating answers
to select a particular answer. (The inverse of select
.)
mapSelectT :: (m a -> m a) -> SelectT r m a -> SelectT r m a Source #
Apply a function to transform the result of a selection computation.
This has a more restricted type than the map
operations for other
monad transformers, because SelectT
does not define a functor in
the category of monads.
runSelectT
(mapSelectT
f m) = f .runSelectT
m