sparsecheck-0.1.0.3: A Logic Programming Library for Test-Data Generation

Safe HaskellSafe-Inferred

SparseCheck

Documentation

newtype LP a Source

Constructors

LP 

Fields

unLP :: State -> (State -> a -> [[Exp]]) -> [[Exp]]
 

Instances

runLP :: Int -> LP [Exp] -> [[Exp]]Source

data State Source

Constructors

State 

data Status Source

Constructors

Unbound Int [Residual] 
Bound Exp 

type Residual = Exp -> LP ()Source

newtype Term a Source

Constructors

Term 

Fields

expr :: Exp
 

Instances

Tuple (Term a) 

data Exp Source

Constructors

Var Var 
Ctr Int [Exp] 

type Var = IntSource

data Pair a b Source

Constructors

a :- b 

Instances

(Eq a, Eq b) => Eq (Pair a b) 
(Show a, Show b) => Show (Pair a b) 
(Convert a, Convert b) => Convert (Pair a b) 
(Tuple a, Tuple b) => Tuple (Pair a b) 

class Tuple a whereSource

Methods

free :: LP aSource

(===) :: a -> a -> LP ()Source

match :: Tuple b => a -> a -> (LP () -> LP b) -> LP bSource

Instances

Tuple () 
Tuple (Term a) 
(Tuple a, Tuple b) => Tuple (a, b) 
(Tuple a, Tuple b) => Tuple (Pair a b) 
(Tuple a, Tuple b, Tuple c) => Tuple (a, b, c) 
(Tuple a, Tuple b, Tuple c, Tuple d) => Tuple (a, b, c, d) 

class Convert a whereSource

Methods

term :: a -> Term aSource

unterm :: (Term a -> LP (), Exp -> a)Source

Instances

Convert Bool 
Convert Int 
Convert a => Convert [a] 
Convert a => Convert (Maybe a) 
(Convert a, Convert b) => Convert (Either a b) 
(Convert a, Convert b) => Convert (a, b) 
(Convert a, Convert b) => Convert (Pair a b) 

ifBound :: Var -> (Exp -> LP a) -> LP a -> LP aSource

unifyExp :: Exp -> Exp -> LP ()Source

unifyVar :: Var -> Var -> LP ()Source

bindVar :: Var -> Exp -> LP ()Source

setDepth :: Int -> Exp -> LP ()Source

rigidExp :: Tuple b => (Exp -> LP b) -> Exp -> LP bSource

rigid :: Tuple b => (Term a -> LP b) -> Term a -> LP bSource

resid :: LP a -> LP aSource

eq :: Exp -> Exp -> LP () -> LP ()Source

(=/=) :: Term a -> Term a -> LP ()Source

matchExp :: Tuple a => Exp -> Exp -> (LP () -> LP a) -> LP aSource

data Alts a b Source

Constructors

a :-> b 
(Alts a b) :|: (Alts a b) 

flattenAlts :: Alts a b -> [(a, b)]Source

instantiate :: Tuple a => a -> [(a, LP b)] -> LP bSource

residuate :: (Tuple a, Tuple b) => a -> [(a, LP b)] -> LP bSource

caseOf :: (Tuple a, Tuple b, Tuple c) => a -> (b -> Alts a (LP c)) -> LP cSource

type Pred = LP ()Source

(?) :: LP a -> LP a -> LP aSource

(&) :: LP a -> LP b -> LP bSource

exists :: Tuple a => (a -> LP b) -> LP bSource

solveHelp :: Int -> ([Exp] -> LP a) -> LP [Exp]Source

solve :: Convert a => Int -> (Term a -> Pred) -> [a]Source

solve2 :: (Convert a, Convert b) => Int -> (Term a -> Term b -> Pred) -> [(a, b)]Source

solve3 :: (Convert a, Convert b, Convert c) => Int -> (Term a -> Term b -> Term c -> Pred) -> [(a, b, c)]Source

solve4 :: (Convert a, Convert b, Convert c, Convert d) => Int -> (Term a -> Term b -> Term c -> Term d -> Pred) -> [(a, b, c, d)]Source

check :: Convert b => Int -> (Term b -> Pred) -> (b -> Bool) -> [b]Source

check2 :: (Convert t, Convert t1) => Int -> (Term t -> Term t1 -> Pred) -> (t -> t1 -> Bool) -> [(t, t1)]Source

check3 :: (Convert t, Convert t1, Convert t2) => Int -> (Term t -> Term t1 -> Term t2 -> Pred) -> (t -> t1 -> t2 -> Bool) -> [(t, t1, t2)]Source

check4 :: (Convert t, Convert t1, Convert t2, Convert t3) => Int -> (Term t -> Term t1 -> Term t2 -> Term t3 -> Pred) -> (t -> t1 -> t2 -> t3 -> Bool) -> [(t, t1, t2, t3)]Source

lower :: Convert a1 => (Term a1 -> LP a) -> a1 -> BoolSource

lower2 :: (Convert a1, Convert a2) => (Term a1 -> Term a2 -> LP a) -> a1 -> a2 -> BoolSource

lower3 :: (Convert a1, Convert a2, Convert a3) => (Term a1 -> Term a2 -> Term a3 -> LP a) -> a1 -> a2 -> a3 -> BoolSource

lower4 :: (Convert a1, Convert a2, Convert a3, Convert a4) => (Term a1 -> Term a2 -> Term a3 -> Term a4 -> LP a) -> a1 -> a2 -> a3 -> a4 -> BoolSource

ctr0 :: a -> Int -> Term aSource

ctr1 :: (a -> b) -> Int -> Term a -> Term bSource

ctr2 :: (a -> b -> c) -> Int -> Term a -> Term b -> Term cSource

ctr3 :: (a -> b -> c -> d) -> Int -> Term a -> Term b -> Term c -> Term dSource

ctr4 :: (a -> b -> c -> d -> e) -> Int -> Term a -> Term b -> Term c -> Term d -> Term eSource

(\/) :: (Int -> b) -> (Int -> c) -> Int -> Pair b cSource

datatype :: (Int -> b) -> bSource

type Family = [(Int, Int)]Source

type Conv a = (Term a -> Pred, Exp -> Maybe a)Source

mkInst :: Int -> Int -> ([Exp] -> Pred) -> Term a -> PredSource

mkConv :: Int -> ([Exp] -> a) -> Exp -> Maybe aSource

conv0 :: a -> Int -> Conv aSource

conv1 :: Convert a => (a -> b) -> Int -> Conv bSource

conv2 :: (Convert a, Convert b) => (a -> b -> c) -> Int -> Conv cSource

conv3 :: (Convert a, Convert b, Convert c) => (a -> b -> c -> d) -> Int -> Conv dSource

conv4 :: (Convert a, Convert b, Convert c, Convert d) => (a -> b -> c -> d -> e) -> Int -> Conv eSource

(-+-) :: (Num a, MonadPlus m, MonadPlus m1) => (a -> (t -> m a1, t1 -> m1 a2)) -> (a -> (t -> m a1, t1 -> m1 a2)) -> a -> (t -> m a1, t1 -> m1 a2)Source

converter :: Num a => (a -> (t, a1 -> Maybe c)) -> (t, a1 -> c)Source

(***) :: Term a -> Term b -> Term (Pair a b)Source

pair :: Term a -> Term b -> Term (a, b)Source

left :: Term a -> Term (Either a b)Source

class Ordered a whereSource

Methods

(|<|) :: Term a -> Term a -> PredSource

(|>|) :: Term a -> Term a -> PredSource

(|<=|) :: Term a -> Term a -> PredSource

(|>=|) :: Term a -> Term a -> PredSource

Instances

append :: Term [a] -> Term [a] -> Term [a] -> PredSource

len :: Term [a] -> Term Int -> PredSource

forall :: Term [a] -> (Term a -> Pred) -> PredSource

forany :: Term [a] -> (Term a -> Pred) -> PredSource

mapP :: (Term a -> Term b -> Pred) -> Term [a] -> Term [b] -> PredSource