cflp-2009.1.26: Constraint Functional-Logic Programming in Haskell

CFLP

Documentation

class (Strategy (Ctx s) s, MonadPlus s, MonadUpdate (Ctx s) s, Update (Ctx s) s s, Update (Ctx s) s (Res s), MonadPlus (Res s), Enumerable (Res s)) => CFLP s Source

type family Ctx s Source

type Data s a = Nondet (Ctx s) s aSource

type Computation a = forall s. CFLP s => Context (Ctx s) -> ID -> Data s aSource

eval :: (Monad s, CFLP s, Generic a) => [s (Ctx s)] -> Computation a -> IO [a]Source

evalPartial :: (Monad s, CFLP s, Generic a) => [s (Ctx s)] -> Computation a -> IO [a]Source

evalPrint :: (Monad s, CFLP s, Generic a) => [s (Ctx s)] -> Computation a -> IO ()Source

data Monadic m a Source

Instances

MonadUpdate c m => MonadUpdate c (Monadic m) 
MonadPlus m => Strategy c (Monadic m) 
Update s m m' => Update s (Monadic m) (Monadic m') 
Monad m => Monad (Monadic m) 
MonadPlus m => MonadPlus (Monadic m) 
Enumerable m => Enumerable (Monadic m) 
(MonadPlus m, Enumerable m) => CFLP (Monadic (UpdateT () m)) 
(MonadPlus m, Enumerable m) => CFLP (CTC (Monadic (UpdateT (StoreCTC ()) m))) 
(MonadPlus m, Enumerable m) => CFLP (CTC (Depth (DepthLim (Monadic (UpdateT (StoreCTC (DepthCtx (DepthLimCtx ()))) m))))) 
(MonadPlus m, Enumerable m) => CFLP (CTC (Rnd (Monadic (UpdateT (StoreCTC (RndCtx ())) m)))) 

data UpdateT s m a Source

Instances

MonadPlus m => MonadUpdate s (UpdateT s m) 
MonadPlus m => Update s (UpdateT s m) m 
MonadPlus m => Update s (UpdateT s m) (UpdateT s m) 
MonadTrans (UpdateT s) 
(MonadPlus m, Enumerable m) => CFLP (Monadic (UpdateT () m)) 
(MonadPlus m, Enumerable m) => CFLP (CTC (Monadic (UpdateT (StoreCTC ()) m))) 
(MonadPlus m, Enumerable m) => CFLP (CTC (Depth (DepthLim (Monadic (UpdateT (StoreCTC (DepthCtx (DepthLimCtx ()))) m))))) 
(MonadPlus m, Enumerable m) => CFLP (CTC (Rnd (Monadic (UpdateT (StoreCTC (RndCtx ())) m)))) 
Monad m => Monad (UpdateT s m) 
Show (HeadNormalForm cs (UpdateT cs [])) 
MonadPlus m => MonadPlus (UpdateT s m) 
Show a => Show (UpdateT s [] a) 
Show (Nondet cs (UpdateT cs []) a) 

data Nondet cs m a Source

Instances

NestLambda cs m t (Nondet cs m b -> f) => NestLambda cs m (a -> t) (Nondet cs m a -> Nondet cs m b -> f) 
NestLambda cs m (a -> b) (Nondet cs m a -> Context cs -> ID -> Nondet cs m b) 
With x (Nondet cs m a) 
(cs ~ Ctx b, m ~ Mon b, MkCons b) => MkCons (Nondet cs m a -> b) 
(cs ~ C a, m ~ M a, WithUntyped a) => WithUntyped (Nondet cs m b -> a) 
LiftFun (Nondet cs m b -> f) => LiftFun (Nondet cs m a -> Nondet cs m b -> f) 
LiftFun (Nondet cs m a -> Context cs -> ID -> Nondet cs m b) 
LiftFun (Nondet cs m a -> ID -> Nondet cs m b) 
LiftFun (Nondet cs m a -> Context cs -> Nondet cs m b) 
LiftFun (Nondet cs m a -> Nondet cs m b) 
Show (Nondet cs (UpdateT cs []) a) 
Show (Nondet cs [] a) 
Monad m => MkCons (Nondet cs m a) 
WithUntyped (Nondet cs m a) 

newtype Context cs Source

Constructors

Context cs 

Instances

NestLambda cs m (a -> b) (Nondet cs m a -> Context cs -> ID -> Nondet cs m b) 
(cs ~ C a, m ~ M a, b ~ T a, WithUntyped a, PatternList p) => PatternList (ConsPatList ((Context cs -> a) -> Match t cs m b) p) 
LiftFun (Nondet cs m a -> Context cs -> ID -> Nondet cs m b) 
LiftFun (Nondet cs m a -> Context cs -> Nondet cs m b) 

data ID Source

Instances

NestLambda cs m (a -> b) (Nondet cs m a -> Context cs -> ID -> Nondet cs m b) 
With ID a => With ID (ID -> a) 
LiftFun (Nondet cs m a -> Context cs -> ID -> Nondet cs m b) 
LiftFun (Nondet cs m a -> ID -> Nondet cs m b) 

withUnique :: With ID a => a -> ID -> Nondet (C ID a) (M ID a) (T ID a)Source

class Narrow a whereSource

Methods

narrow :: (Monad s, Strategy c s, MonadUpdate c s) => Context c -> ID -> Nondet c s aSource

Instances

Narrow Bool 
(Narrow a, Generic a) => Narrow [a] 

unknown :: (Monad s, Strategy c s, MonadUpdate c s, Narrow a) => ID -> Nondet c s aSource

oneOf :: (Strategy c s, MonadUpdate c s) => [Nondet c s a] -> Context c -> ID -> Nondet c s aSource

(?) :: (Monad s, Strategy c s, MonadUpdate c s) => Nondet c s a -> Nondet c s a -> ID -> Nondet c s aSource

withHNF :: (Monad m, Update cs m m) => Nondet cs m a -> (HeadNormalForm cs m -> Context cs -> Nondet cs m b) -> Context cs -> Nondet cs m bSource

caseOf :: (MonadPlus m, Update cs m m) => Nondet cs m a -> [Match a cs m b] -> Context cs -> Nondet cs m bSource

caseOf_ :: (Monad m, Update cs m m) => Nondet cs m a -> [Match a cs m b] -> Nondet cs m b -> Context cs -> Nondet cs m bSource

data Match a cs m b Source

Instances

(cs ~ C a, m ~ M a, b ~ T a, WithUntyped a, PatternList p) => PatternList (ConsPatList ((Context cs -> a) -> Match t cs m b) p) 

class Generic a whereSource

Methods

genericOps :: GenericOps aSource

constr :: Int -> GenericOps aSource

Instances

Generic Bool 
Generic a => Generic [a] 
(Generic a, Generic b) => Generic (a -> b) 

nondet :: (Monad m, Update cs m m, Generic a) => a -> Nondet cs m aSource

class ApplyCons a whereSource

Associated Types

type Result a Source

Methods

applyCons :: a -> [NormalForm] -> Result aSource

Instances

ApplyCons Bool 
ApplyCons [a] 
(Generic a, ApplyCons b) => ApplyCons (a -> b) 

(!) :: (Int -> GenericOps a) -> (Int -> GenericOps a) -> Int -> GenericOps aSource

cons :: ApplyCons a => String -> a -> Decons a -> Int -> GenericOps (Result a)Source

groundNormalForm :: (Monad s, Monad m, Update c s m) => s c -> Nondet c s a -> m NormalFormSource

partialNormalForm :: (Monad s, Strategy c s, Monad m, Update c s m) => s c -> Nondet c s a -> m NormalFormSource

data ConsPatList a b Source

Constructors

a :! b 

Instances

(cs ~ C a, m ~ M a, b ~ T a, WithUntyped a, PatternList p) => PatternList (ConsPatList ((Context cs -> a) -> Match t cs m b) p) 
(MkCons a, ConsList b) => ConsList (ConsPatList a b) 

constructors :: (ConsList a, Generic (CData a)) => aSource

patterns :: (PatternList a, Generic (PData a)) => aSource

apply :: (Monad m, Update cs m m) => Nondet cs m (a -> b) -> Nondet cs m a -> Context cs -> ID -> Nondet cs m bSource

fun :: (Monad m, LiftFun f, NestLambda cs m t (Lift f)) => f -> Nondet cs m tSource