monadiccp-0.7.7: Constraint Programming

Safe HaskellNone
LanguageHaskell98

Control.CP.Transformers

Documentation

eval :: (Solver solver, Queue q, Elem q ~ (Label solver, Tree solver (ForResult t), TreeState t), Transformer t, ForSolver t ~ solver) => Tree solver (ForResult t) -> q -> t -> solver (Int, [ForResult t]) Source #

eval' :: SearchSig solver q t (ForResult t) Source #

continue :: ContinueSig solver q t (ForResult t) Source #

data NodeBoundedST (solver :: * -> *) a Source #

Instances

Solver solver => Transformer (NodeBoundedST solver a) Source # 

Associated Types

type EvalState (NodeBoundedST solver a) :: * Source #

type TreeState (NodeBoundedST solver a) :: * Source #

type ForSolver (NodeBoundedST solver a) :: * -> * Source #

type ForResult (NodeBoundedST solver a) :: * Source #

Methods

leftT :: NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) Source #

rightT :: NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) Source #

nextT :: (Solver (ForSolver (NodeBoundedST solver a)), Queue q, Transformer (NodeBoundedST solver a), (* ~ Elem q) (Label (ForSolver (NodeBoundedST solver a)), Tree (ForSolver (NodeBoundedST solver a)) (ForResult (NodeBoundedST solver a)), TreeState (NodeBoundedST solver a)), ((* -> *) ~ ForSolver (NodeBoundedST solver a)) (ForSolver (NodeBoundedST solver a))) => Int -> Tree (ForSolver (NodeBoundedST solver a)) (ForResult (NodeBoundedST solver a)) -> q -> NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) -> ForSolver (NodeBoundedST solver a) (Int, [ForResult (NodeBoundedST solver a)]) Source #

initT :: NodeBoundedST solver a -> Tree (ForSolver (NodeBoundedST solver a)) (ForResult (NodeBoundedST solver a)) -> ForSolver (NodeBoundedST solver a) (EvalState (NodeBoundedST solver a), TreeState (NodeBoundedST solver a)) Source #

returnT :: (Solver solver, Queue q, Transformer (NodeBoundedST solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (NodeBoundedST solver a)), TreeState (NodeBoundedST solver a)), ((* -> *) ~ ForSolver (NodeBoundedST solver a)) solver) => Int -> q -> NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> solver (Int, [ForResult (NodeBoundedST solver a)]) Source #

endT :: (Solver solver, Queue q, Transformer (NodeBoundedST solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (NodeBoundedST solver a)), TreeState (NodeBoundedST solver a)), ((* -> *) ~ ForSolver (NodeBoundedST solver a)) solver) => Int -> q -> NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> solver (Int, [ForResult (NodeBoundedST solver a)]) Source #

type EvalState (NodeBoundedST solver a) Source # 
type EvalState (NodeBoundedST solver a) = Int
type TreeState (NodeBoundedST solver a) Source # 
type TreeState (NodeBoundedST solver a) = ()
type ForSolver (NodeBoundedST solver a) Source # 
type ForSolver (NodeBoundedST solver a) = solver
type ForResult (NodeBoundedST solver a) Source # 
type ForResult (NodeBoundedST solver a) = a

data DepthBoundedST (solver :: * -> *) a Source #

Instances

Solver solver => Transformer (DepthBoundedST solver a) Source # 

Associated Types

type EvalState (DepthBoundedST solver a) :: * Source #

type TreeState (DepthBoundedST solver a) :: * Source #

type ForSolver (DepthBoundedST solver a) :: * -> * Source #

type ForResult (DepthBoundedST solver a) :: * Source #

Methods

leftT :: DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) Source #

rightT :: DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) Source #

nextT :: (Solver (ForSolver (DepthBoundedST solver a)), Queue q, Transformer (DepthBoundedST solver a), (* ~ Elem q) (Label (ForSolver (DepthBoundedST solver a)), Tree (ForSolver (DepthBoundedST solver a)) (ForResult (DepthBoundedST solver a)), TreeState (DepthBoundedST solver a)), ((* -> *) ~ ForSolver (DepthBoundedST solver a)) (ForSolver (DepthBoundedST solver a))) => Int -> Tree (ForSolver (DepthBoundedST solver a)) (ForResult (DepthBoundedST solver a)) -> q -> DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) -> ForSolver (DepthBoundedST solver a) (Int, [ForResult (DepthBoundedST solver a)]) Source #

initT :: DepthBoundedST solver a -> Tree (ForSolver (DepthBoundedST solver a)) (ForResult (DepthBoundedST solver a)) -> ForSolver (DepthBoundedST solver a) (EvalState (DepthBoundedST solver a), TreeState (DepthBoundedST solver a)) Source #

returnT :: (Solver solver, Queue q, Transformer (DepthBoundedST solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (DepthBoundedST solver a)), TreeState (DepthBoundedST solver a)), ((* -> *) ~ ForSolver (DepthBoundedST solver a)) solver) => Int -> q -> DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> solver (Int, [ForResult (DepthBoundedST solver a)]) Source #

endT :: (Solver solver, Queue q, Transformer (DepthBoundedST solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (DepthBoundedST solver a)), TreeState (DepthBoundedST solver a)), ((* -> *) ~ ForSolver (DepthBoundedST solver a)) solver) => Int -> q -> DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> solver (Int, [ForResult (DepthBoundedST solver a)]) Source #

type EvalState (DepthBoundedST solver a) Source # 
type EvalState (DepthBoundedST solver a) = ()
type TreeState (DepthBoundedST solver a) Source # 
type TreeState (DepthBoundedST solver a) = Int
type ForSolver (DepthBoundedST solver a) Source # 
type ForSolver (DepthBoundedST solver a) = solver
type ForResult (DepthBoundedST solver a) Source # 
type ForResult (DepthBoundedST solver a) = a

class Transformer t where Source #

Minimal complete definition

initT

Associated Types

type EvalState t :: * Source #

type TreeState t :: * Source #

type ForSolver t :: * -> * Source #

type ForResult t :: * Source #

Methods

leftT, rightT :: t -> EvalState t -> TreeState t -> TreeState t Source #

nextT :: SearchSig (ForSolver t) q t (ForResult t) Source #

initT :: t -> Tree (ForSolver t) (ForResult t) -> ForSolver t (EvalState t, TreeState t) Source #

returnT :: ContinueSig solver q t (ForResult t) Source #

endT :: ContinueSig solver q t (ForResult t) Source #

Instances

Solver solver => Transformer (NodeBoundedST solver a) Source # 

Associated Types

type EvalState (NodeBoundedST solver a) :: * Source #

type TreeState (NodeBoundedST solver a) :: * Source #

type ForSolver (NodeBoundedST solver a) :: * -> * Source #

type ForResult (NodeBoundedST solver a) :: * Source #

Methods

leftT :: NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) Source #

rightT :: NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) Source #

nextT :: (Solver (ForSolver (NodeBoundedST solver a)), Queue q, Transformer (NodeBoundedST solver a), (* ~ Elem q) (Label (ForSolver (NodeBoundedST solver a)), Tree (ForSolver (NodeBoundedST solver a)) (ForResult (NodeBoundedST solver a)), TreeState (NodeBoundedST solver a)), ((* -> *) ~ ForSolver (NodeBoundedST solver a)) (ForSolver (NodeBoundedST solver a))) => Int -> Tree (ForSolver (NodeBoundedST solver a)) (ForResult (NodeBoundedST solver a)) -> q -> NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> TreeState (NodeBoundedST solver a) -> ForSolver (NodeBoundedST solver a) (Int, [ForResult (NodeBoundedST solver a)]) Source #

initT :: NodeBoundedST solver a -> Tree (ForSolver (NodeBoundedST solver a)) (ForResult (NodeBoundedST solver a)) -> ForSolver (NodeBoundedST solver a) (EvalState (NodeBoundedST solver a), TreeState (NodeBoundedST solver a)) Source #

returnT :: (Solver solver, Queue q, Transformer (NodeBoundedST solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (NodeBoundedST solver a)), TreeState (NodeBoundedST solver a)), ((* -> *) ~ ForSolver (NodeBoundedST solver a)) solver) => Int -> q -> NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> solver (Int, [ForResult (NodeBoundedST solver a)]) Source #

endT :: (Solver solver, Queue q, Transformer (NodeBoundedST solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (NodeBoundedST solver a)), TreeState (NodeBoundedST solver a)), ((* -> *) ~ ForSolver (NodeBoundedST solver a)) solver) => Int -> q -> NodeBoundedST solver a -> EvalState (NodeBoundedST solver a) -> solver (Int, [ForResult (NodeBoundedST solver a)]) Source #

Solver solver => Transformer (DepthBoundedST solver a) Source # 

Associated Types

type EvalState (DepthBoundedST solver a) :: * Source #

type TreeState (DepthBoundedST solver a) :: * Source #

type ForSolver (DepthBoundedST solver a) :: * -> * Source #

type ForResult (DepthBoundedST solver a) :: * Source #

Methods

leftT :: DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) Source #

rightT :: DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) Source #

nextT :: (Solver (ForSolver (DepthBoundedST solver a)), Queue q, Transformer (DepthBoundedST solver a), (* ~ Elem q) (Label (ForSolver (DepthBoundedST solver a)), Tree (ForSolver (DepthBoundedST solver a)) (ForResult (DepthBoundedST solver a)), TreeState (DepthBoundedST solver a)), ((* -> *) ~ ForSolver (DepthBoundedST solver a)) (ForSolver (DepthBoundedST solver a))) => Int -> Tree (ForSolver (DepthBoundedST solver a)) (ForResult (DepthBoundedST solver a)) -> q -> DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> TreeState (DepthBoundedST solver a) -> ForSolver (DepthBoundedST solver a) (Int, [ForResult (DepthBoundedST solver a)]) Source #

initT :: DepthBoundedST solver a -> Tree (ForSolver (DepthBoundedST solver a)) (ForResult (DepthBoundedST solver a)) -> ForSolver (DepthBoundedST solver a) (EvalState (DepthBoundedST solver a), TreeState (DepthBoundedST solver a)) Source #

returnT :: (Solver solver, Queue q, Transformer (DepthBoundedST solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (DepthBoundedST solver a)), TreeState (DepthBoundedST solver a)), ((* -> *) ~ ForSolver (DepthBoundedST solver a)) solver) => Int -> q -> DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> solver (Int, [ForResult (DepthBoundedST solver a)]) Source #

endT :: (Solver solver, Queue q, Transformer (DepthBoundedST solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (DepthBoundedST solver a)), TreeState (DepthBoundedST solver a)), ((* -> *) ~ ForSolver (DepthBoundedST solver a)) solver) => Int -> q -> DepthBoundedST solver a -> EvalState (DepthBoundedST solver a) -> solver (Int, [ForResult (DepthBoundedST solver a)]) Source #

Solver solver => Transformer (RestartST es ts solver a) Source # 

Associated Types

type EvalState (RestartST es ts solver a) :: * Source #

type TreeState (RestartST es ts solver a) :: * Source #

type ForSolver (RestartST es ts solver a) :: * -> * Source #

type ForResult (RestartST es ts solver a) :: * Source #

Methods

leftT :: RestartST es ts solver a -> EvalState (RestartST es ts solver a) -> TreeState (RestartST es ts solver a) -> TreeState (RestartST es ts solver a) Source #

rightT :: RestartST es ts solver a -> EvalState (RestartST es ts solver a) -> TreeState (RestartST es ts solver a) -> TreeState (RestartST es ts solver a) Source #

nextT :: (Solver (ForSolver (RestartST es ts solver a)), Queue q, Transformer (RestartST es ts solver a), (* ~ Elem q) (Label (ForSolver (RestartST es ts solver a)), Tree (ForSolver (RestartST es ts solver a)) (ForResult (RestartST es ts solver a)), TreeState (RestartST es ts solver a)), ((* -> *) ~ ForSolver (RestartST es ts solver a)) (ForSolver (RestartST es ts solver a))) => Int -> Tree (ForSolver (RestartST es ts solver a)) (ForResult (RestartST es ts solver a)) -> q -> RestartST es ts solver a -> EvalState (RestartST es ts solver a) -> TreeState (RestartST es ts solver a) -> ForSolver (RestartST es ts solver a) (Int, [ForResult (RestartST es ts solver a)]) Source #

initT :: RestartST es ts solver a -> Tree (ForSolver (RestartST es ts solver a)) (ForResult (RestartST es ts solver a)) -> ForSolver (RestartST es ts solver a) (EvalState (RestartST es ts solver a), TreeState (RestartST es ts solver a)) Source #

returnT :: (Solver solver, Queue q, Transformer (RestartST es ts solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (RestartST es ts solver a)), TreeState (RestartST es ts solver a)), ((* -> *) ~ ForSolver (RestartST es ts solver a)) solver) => Int -> q -> RestartST es ts solver a -> EvalState (RestartST es ts solver a) -> solver (Int, [ForResult (RestartST es ts solver a)]) Source #

endT :: (Solver solver, Queue q, Transformer (RestartST es ts solver a), (* ~ Elem q) (Label solver, Tree solver (ForResult (RestartST es ts solver a)), TreeState (RestartST es ts solver a)), ((* -> *) ~ ForSolver (RestartST es ts solver a)) solver) => Int -> q -> RestartST es ts solver a -> EvalState (RestartST es ts solver a) -> solver (Int, [ForResult (RestartST es ts solver a)]) Source #