-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Constraint Functional-Logic Programming in Haskell -- -- This package provides combinators for constraint functional-logic -- programming ((C)FLP) in Haskell. The combinators might later be used -- as a target language for compiling programs written in an FLP language -- like Curry or Toy. Another application of FLP is demand driven -- test-case generation. @package cflp @version 0.1 module Control.CFLP class (MonadConstr Choice m, ConstraintStore Choice cs, MonadSolve cs m m) => CFLP cs m type Computation m a = EvalStore -> ID -> Nondet (ConstrT EvalStore m) a eval :: (CFLP EvalStore m, MonadSolve EvalStore m m', Data a) => Strategy m' -> (EvalStore -> ID -> Nondet m a) -> IO [a] evalPrint :: (CFLP EvalStore m, MonadSolve EvalStore m m', Data a, Show a) => Strategy m' -> (EvalStore -> ID -> Nondet m a) -> IO () type Strategy m = forall a. m a -> [a] depthFirst :: Strategy [] data NormalForm data HeadNormalForm m Cons :: DataType -> ConIndex -> [Untyped m] -> HeadNormalForm m mkHNF :: Constr -> [Untyped m] -> HeadNormalForm m newtype Nondet m a Typed :: Untyped m -> Nondet m a untyped :: Nondet m a -> Untyped m data ID initID :: IO ID withUnique :: (With ID a) => a -> ID -> Nondet (Mon ID a) (Typ ID a) class Unknown a unknown :: (Unknown a, MonadConstr Choice m) => ID -> Nondet m a failure :: (MonadPlus m) => Nondet m a oneOf :: (MonadConstr Choice m) => [Nondet m a] -> ID -> Nondet m a withHNF :: (Monad m, MonadSolve cs m m) => Nondet m a -> (HeadNormalForm m -> cs -> Nondet m b) -> cs -> Nondet m b caseOf :: (MonadSolve cs m m) => Nondet m a -> [Match cs m b] -> cs -> Nondet m b caseOf_ :: (MonadSolve cs m m) => Nondet m a -> [Match cs m b] -> Nondet m b -> cs -> Nondet m b data Match cs m a nondet :: (Monad m, Data a) => a -> Nondet m a normalForm :: (MonadSolve cs m m', Data a) => Nondet m a -> cs -> m' a class ConsRep a consRep :: (ConsRep a) => a -> Constr cons :: (MkCons m a b) => a -> b match :: (ConsRep a, WithUntyped b) => a -> (cs -> b) -> Match cs (M b) (T b) prim_eq :: (MonadSolve cs m m) => Untyped m -> Untyped m -> StateT cs m Bool true :: (Monad m) => Nondet m Bool pTrue :: (cs -> Nondet m a) -> Match cs m a false :: (Monad m) => Nondet m Bool pFalse :: (cs -> Nondet m a) -> Match cs m a not :: (MonadSolve cs m m) => Nondet m Bool -> cs -> Nondet m Bool (===) :: (MonadSolve cs m m) => Nondet m a -> Nondet m a -> cs -> Nondet m Bool nil :: (Monad m) => Nondet m [a] pNil :: (cs -> Nondet m a) -> Match cs m a (^:) :: (Monad m) => Nondet m a -> Nondet m [a] -> Nondet m [a] pCons :: (cs -> Nondet m a -> Nondet m [a] -> Nondet m b) -> Match cs m b fromList :: (Monad m) => [Nondet m a] -> Nondet m [a] null :: (MonadSolve cs m m) => Nondet m [a] -> cs -> Nondet m Bool head :: (MonadSolve cs m m) => Nondet m [a] -> cs -> Nondet m a tail :: (MonadSolve cs m m) => Nondet m [a] -> cs -> Nondet m [a] instance CFLP ChoiceStore (ConstrT ChoiceStore [])