constrained-generators-0.2.0.0: Framework for generating constrained random data using a subset of first order logic
Safe HaskellSafe-Inferred
LanguageHaskell2010

Test.Minimal.Base

Synopsis

Documentation

type AppRequires t dom rng = (Logic t, TypeList dom, Eq (t dom rng), Show (t dom rng), Typeable dom, Typeable rng, All HasSpec dom, HasSpec rng) Source #

data Term a where Source #

Constructors

App ∷ ∀ t dom rng. AppRequires t dom rng ⇒ t dom rng → List Term dom → Term rng 
Lit ∷ (Typeable a, Eq a, Show a) ⇒ a → Term a 
VHasSpec a ⇒ Var a → Term a 

Instances

Instances details
Show (Term a) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

showsPrecIntTerm a → ShowS #

showTerm a → String #

showList ∷ [Term a] → ShowS #

Rename (Term a) Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

renameTypeable x ⇒ Var x → Var x → Term a → Term a Source #

HasVariables (Term a) Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

freeVarsTerm a → FreeVars Source #

freeVarSetTerm a → Set Name Source #

countOfNameTerm a → Int Source #

appearsInNameTerm a → Bool Source #

Eq (Term a) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

(==)Term a → Term a → Bool #

(/=)Term a → Term a → Bool #

Pretty (Term a) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

prettyTerm a → Doc ann Source #

prettyList ∷ [Term a] → Doc ann Source #

Pretty (WithPrec (Term a)) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

prettyWithPrec (Term a) → Doc ann Source #

prettyList ∷ [WithPrec (Term a)] → Doc ann Source #

HasVariables (List Term as) Source # 
Instance details

Defined in Test.Minimal.Syntax

applyFunSym ∷ ∀ t ds rng. (Typeable rng, Eq rng, Show rng, Semantics t) ⇒ FunTy ds rng → List Term ds → Maybe rng Source #

If the list is composed solely of literals, apply the function to get a value

sameTermsAll HasSpec as ⇒ List Term as → List Term as → Bool Source #

class Syntax (t ∷ [Type] → TypeType) where Source #

Syntactic operations are ones that have to do with the structure and appearence of the type.

Minimal complete definition

name

Methods

inFix ∷ ∀ dom rng. t dom rng → Bool Source #

name ∷ ∀ dom rng. t dom rng → String Source #

Instances

Instances details
Syntax BoolSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

inFix ∷ ∀ (dom ∷ [Type]) rng. BoolSym dom rng → Bool Source #

name ∷ ∀ (dom ∷ [Type]) rng. BoolSym dom rng → String Source #

Syntax EitherSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

inFix ∷ ∀ (dom ∷ [Type]) rng. EitherSym dom rng → Bool Source #

name ∷ ∀ (dom ∷ [Type]) rng. EitherSym dom rng → String Source #

Syntax IntegerSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

inFix ∷ ∀ (dom ∷ [Type]) rng. IntegerSym dom rng → Bool Source #

name ∷ ∀ (dom ∷ [Type]) rng. IntegerSym dom rng → String Source #

Syntax ListSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

inFix ∷ ∀ (dom ∷ [Type]) rng. ListSym dom rng → Bool Source #

name ∷ ∀ (dom ∷ [Type]) rng. ListSym dom rng → String Source #

Syntax PairSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

inFix ∷ ∀ (dom ∷ [Type]) rng. PairSym dom rng → Bool Source #

name ∷ ∀ (dom ∷ [Type]) rng. PairSym dom rng → String Source #

Syntax SetSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

inFix ∷ ∀ (dom ∷ [Type]) rng. SetSym dom rng → Bool Source #

name ∷ ∀ (dom ∷ [Type]) rng. SetSym dom rng → String Source #

Syntax EqSym Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

inFix ∷ ∀ (dom ∷ [Type]) rng. EqSym dom rng → Bool Source #

name ∷ ∀ (dom ∷ [Type]) rng. EqSym dom rng → String Source #

Syntax TupleSym Source # 
Instance details

Defined in Test.Minimal.Tuple

Methods

inFix ∷ ∀ (dom ∷ [Type]) rng. TupleSym dom rng → Bool Source #

name ∷ ∀ (dom ∷ [Type]) rng. TupleSym dom rng → String Source #

class Syntax t ⇒ Semantics (t ∷ [Type] → TypeType) where Source #

Semantic operations are ones that give the function symbol, meaning as a function. I.e. how to apply the function to a list of arguments and return a value, or to apply meaning preserving rewrite rules.

Minimal complete definition

semantics

Methods

semantics ∷ ∀ d r. t d r → FunTy d r Source #

rewriteRules ∷ ∀ ds rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ t ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

Instances

Instances details
Semantics BoolSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

semantics ∷ ∀ (d ∷ [Type]) r. BoolSym d r → FunTy d r Source #

rewriteRules ∷ ∀ (ds ∷ [Type]) rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ BoolSym ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

Semantics EitherSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

semantics ∷ ∀ (d ∷ [Type]) r. EitherSym d r → FunTy d r Source #

rewriteRules ∷ ∀ (ds ∷ [Type]) rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ EitherSym ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

Semantics IntegerSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

semantics ∷ ∀ (d ∷ [Type]) r. IntegerSym d r → FunTy d r Source #

rewriteRules ∷ ∀ (ds ∷ [Type]) rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ IntegerSym ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

Semantics ListSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

semantics ∷ ∀ (d ∷ [Type]) r. ListSym d r → FunTy d r Source #

rewriteRules ∷ ∀ (ds ∷ [Type]) rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ ListSym ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

Semantics PairSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

semantics ∷ ∀ (d ∷ [Type]) r. PairSym d r → FunTy d r Source #

rewriteRules ∷ ∀ (ds ∷ [Type]) rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ PairSym ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

Semantics SetSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

semantics ∷ ∀ (d ∷ [Type]) r. SetSym d r → FunTy d r Source #

rewriteRules ∷ ∀ (ds ∷ [Type]) rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ SetSym ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

Semantics EqSym Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

semantics ∷ ∀ (d ∷ [Type]) r. EqSym d r → FunTy d r Source #

rewriteRules ∷ ∀ (ds ∷ [Type]) rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ EqSym ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

Semantics TupleSym Source # 
Instance details

Defined in Test.Minimal.Tuple

Methods

semantics ∷ ∀ (d ∷ [Type]) r. TupleSym d r → FunTy d r Source #

rewriteRules ∷ ∀ (ds ∷ [Type]) rng. (TypeList ds, Typeable ds, HasSpec rng, All HasSpec ds) ⇒ TupleSym ds rng → List Term ds → Evidence (Typeable rng, Eq rng, Show rng) → Maybe (Term rng) Source #

class (Typeable t, Syntax t, Semantics t) ⇒ Logic (t ∷ [Type] → TypeType) where Source #

Logical operations are one that support reasoning about how a function symbol relates to logical properties, that we call Spec's

Minimal complete definition

propagate | propagateTypeSpec, propagateMemberSpec

Methods

propagateTypeSpec ∷ (AppRequires t as b, HasSpec a) ⇒ t as b → ListCtx as (HOLE a) → TypeSpec b → [b] → Spec a Source #

propagateMemberSpec ∷ (AppRequires t as b, HasSpec a) ⇒ t as b → ListCtx as (HOLE a) → NonEmpty b → Spec a Source #

propagate ∷ (AppRequires t as b, HasSpec a) ⇒ t as b → ListCtx as (HOLE a) → Spec b → Spec a Source #

Instances

Instances details
Logic BoolSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

propagateTypeSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires BoolSym as b, HasSpec a) ⇒ BoolSym as b → ListCtx as (HOLE a) → TypeSpec b → [b] → Spec a Source #

propagateMemberSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires BoolSym as b, HasSpec a) ⇒ BoolSym as b → ListCtx as (HOLE a) → NonEmpty b → Spec a Source #

propagate ∷ ∀ (as ∷ [Type]) b a. (AppRequires BoolSym as b, HasSpec a) ⇒ BoolSym as b → ListCtx as (HOLE a) → Spec b → Spec a Source #

Logic EitherSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

propagateTypeSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires EitherSym as b, HasSpec a) ⇒ EitherSym as b → ListCtx as (HOLE a) → TypeSpec b → [b] → Spec a Source #

propagateMemberSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires EitherSym as b, HasSpec a) ⇒ EitherSym as b → ListCtx as (HOLE a) → NonEmpty b → Spec a Source #

propagate ∷ ∀ (as ∷ [Type]) b a. (AppRequires EitherSym as b, HasSpec a) ⇒ EitherSym as b → ListCtx as (HOLE a) → Spec b → Spec a Source #

Logic IntegerSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

propagateTypeSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires IntegerSym as b, HasSpec a) ⇒ IntegerSym as b → ListCtx as (HOLE a) → TypeSpec b → [b] → Spec a Source #

propagateMemberSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires IntegerSym as b, HasSpec a) ⇒ IntegerSym as b → ListCtx as (HOLE a) → NonEmpty b → Spec a Source #

propagate ∷ ∀ (as ∷ [Type]) b a. (AppRequires IntegerSym as b, HasSpec a) ⇒ IntegerSym as b → ListCtx as (HOLE a) → Spec b → Spec a Source #

Logic PairSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

propagateTypeSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires PairSym as b, HasSpec a) ⇒ PairSym as b → ListCtx as (HOLE a) → TypeSpec b → [b] → Spec a Source #

propagateMemberSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires PairSym as b, HasSpec a) ⇒ PairSym as b → ListCtx as (HOLE a) → NonEmpty b → Spec a Source #

propagate ∷ ∀ (as ∷ [Type]) b a. (AppRequires PairSym as b, HasSpec a) ⇒ PairSym as b → ListCtx as (HOLE a) → Spec b → Spec a Source #

Logic SetSym Source # 
Instance details

Defined in Test.Minimal.Model

Methods

propagateTypeSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires SetSym as b, HasSpec a) ⇒ SetSym as b → ListCtx as (HOLE a) → TypeSpec b → [b] → Spec a Source #

propagateMemberSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires SetSym as b, HasSpec a) ⇒ SetSym as b → ListCtx as (HOLE a) → NonEmpty b → Spec a Source #

propagate ∷ ∀ (as ∷ [Type]) b a. (AppRequires SetSym as b, HasSpec a) ⇒ SetSym as b → ListCtx as (HOLE a) → Spec b → Spec a Source #

Logic EqSym Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

propagateTypeSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires EqSym as b, HasSpec a) ⇒ EqSym as b → ListCtx as (HOLE a) → TypeSpec b → [b] → Spec a Source #

propagateMemberSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires EqSym as b, HasSpec a) ⇒ EqSym as b → ListCtx as (HOLE a) → NonEmpty b → Spec a Source #

propagate ∷ ∀ (as ∷ [Type]) b a. (AppRequires EqSym as b, HasSpec a) ⇒ EqSym as b → ListCtx as (HOLE a) → Spec b → Spec a Source #

Logic TupleSym Source # 
Instance details

Defined in Test.Minimal.Tuple

Methods

propagateTypeSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires TupleSym as b, HasSpec a) ⇒ TupleSym as b → ListCtx as (HOLE a) → TypeSpec b → [b] → Spec a Source #

propagateMemberSpec ∷ ∀ (as ∷ [Type]) b a. (AppRequires TupleSym as b, HasSpec a) ⇒ TupleSym as b → ListCtx as (HOLE a) → NonEmpty b → Spec a Source #

propagate ∷ ∀ (as ∷ [Type]) b a. (AppRequires TupleSym as b, HasSpec a) ⇒ TupleSym as b → ListCtx as (HOLE a) → Spec b → Spec a Source #

data Pred where Source #

Constructors

ElemPred ∷ ∀ a. HasSpec a ⇒ BoolTerm a → NonEmpty a → Pred 
And ∷ [Pred] → Pred 
Exists ∷ ((∀ b. Term b → b) → GE a) → Binder a → Pred 
ForAll ∷ (Container t a, HasSpec t, HasSpec a) ⇒ Term t → Binder a → Pred 
DependsOn ∷ (HasSpec a, HasSpec b) ⇒ Term a → Term b → Pred 
AssertTerm BoolPred 
TruePredPred 
FalsePredNonEmpty StringPred 
CaseHasSpec (Either a b) ⇒ Term (Either a b) → Binder a → Binder b → Pred 
LetTerm a → Binder a → Pred 
SubstHasSpec a ⇒ Var a → Term a → PredPred 

Instances

Instances details
Monoid Pred Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

memptyPred #

mappendPredPredPred #

mconcat ∷ [Pred] → Pred #

Semigroup Pred Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

(<>)PredPredPred #

sconcatNonEmpty PredPred #

stimesIntegral b ⇒ b → PredPred #

Show Pred Source # 
Instance details

Defined in Test.Minimal.Base

Methods

showsPrecIntPredShowS #

showPredString #

showList ∷ [Pred] → ShowS #

Rename Pred Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

renameTypeable x ⇒ Var x → Var x → PredPred Source #

HasVariables Pred Source # 
Instance details

Defined in Test.Minimal.Syntax

Pretty Pred Source # 
Instance details

Defined in Test.Minimal.Base

Methods

prettyPredDoc ann Source #

prettyList ∷ [Pred] → Doc ann Source #

data Binder a where Source #

Constructors

(:->)HasSpec a ⇒ Var a → PredBinder a 

Instances

Instances details
Rename (Binder a) Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

renameTypeable x ⇒ Var x → Var x → Binder a → Binder a Source #

HasVariables (Binder a) Source # 
Instance details

Defined in Test.Minimal.Syntax

Pretty (Binder a) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

prettyBinder a → Doc ann Source #

prettyList ∷ [Binder a] → Doc ann Source #

class Container t e | t → e where Source #

Methods

fromForAllSpec ∷ (HasSpec t, HasSpec e) ⇒ Spec e → Spec t Source #

forAllToList ∷ t → [e] Source #

Instances

Instances details
Ord s ⇒ Container (Set s) s Source # 
Instance details

Defined in Test.Minimal.Model

Methods

fromForAllSpecSpec s → Spec (Set s) Source #

forAllToListSet s → [s] Source #

data Binders as where Source #

Constructors

BindsAll HasSpec as ⇒ List Var as → PredBinders as 

data Bind a where Source #

Constructors

Bind 

Fields

toBindAll HasSpec as ⇒ List Term as → List Var as → List Bind as Source #

data Spec a where Source #

Constructors

TrueSpecSpec a 
ErrorSpecNonEmpty StringSpec a 
SuspendedSpecHasSpec a ⇒ Var a → PredSpec a 
MemberSpecNonEmpty a → Spec a 
TypeSpecHasSpec a ⇒ TypeSpec a → [a] → Spec a 

Instances

Instances details
HasSpec a ⇒ Monoid (Spec a) Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

memptySpec a #

mappendSpec a → Spec a → Spec a #

mconcat ∷ [Spec a] → Spec a #

HasSpec a ⇒ Semigroup (Spec a) Source # 
Instance details

Defined in Test.Minimal.Syntax

Methods

(<>)Spec a → Spec a → Spec a #

sconcatNonEmpty (Spec a) → Spec a #

stimesIntegral b ⇒ b → Spec a → Spec a #

HasSpec a ⇒ Show (Spec a) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

showsPrecIntSpec a → ShowS #

showSpec a → String #

showList ∷ [Spec a] → ShowS #

HasSpec a ⇒ Pretty (Spec a) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

prettySpec a → Doc ann Source #

prettyList ∷ [Spec a] → Doc ann Source #

HasSpec a ⇒ Pretty (WithPrec (Spec a)) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

prettyWithPrec (Spec a) → Doc ann Source #

prettyList ∷ [WithPrec (Spec a)] → Doc ann Source #

typeSpecHasSpec a ⇒ TypeSpec a → Spec a Source #

constrained ∷ ∀ a. HasSpec a ⇒ (Term a → Pred) → Spec a Source #

bindHasSpec a ⇒ (Term a → Pred) → Binder a Source #

class (Typeable a, Eq a, Show a, Show (TypeSpec a), Typeable (TypeSpec a)) ⇒ HasSpec a where Source #

Minimal complete definition

anySpec, combineSpec, genFromTypeSpec, conformsTo, toPreds

Associated Types

type TypeSpec a Source #

The `TypeSpec a` is the type-specific `Spec a`.

Methods

anySpecTypeSpec a Source #

combineSpecTypeSpec a → TypeSpec a → Spec a Source #

genFromTypeSpec ∷ (HasCallStack, MonadGenError m) ⇒ TypeSpec a → GenT m a Source #

Generate a value that satisfies the Spec. The key property for this generator is soundness: ∀ a ∈ genFromTypeSpec spec. a conformsTo spec

conformsToHasCallStack ⇒ a → TypeSpec a → Bool Source #

Check conformance to the spec.

toPredsTerm a → TypeSpec a → Pred Source #

Convert a spec to predicates: The key property here is: ∀ a. a conformsTo spec == a conformsTo constrained (t -> toPreds t spec)

guardTypeSpecTypeSpec a → Spec a Source #

This is used to detect self inconsistencies in a (TypeSpec t) guardTypeSpec message ty --> ErrorSpec message, if ty is inconsistent

Instances

Instances details
HasSpec Integer Source # 
Instance details

Defined in Test.Minimal.Model

Associated Types

type TypeSpec Integer Source #

HasSpec Bool Source # 
Instance details

Defined in Test.Minimal.Model

Associated Types

type TypeSpec Bool Source #

(Container (Set a) a, Ord a, HasSpec a) ⇒ HasSpec (Set a) Source # 
Instance details

Defined in Test.Minimal.Model

Associated Types

type TypeSpec (Set a) Source #

Methods

anySpecTypeSpec (Set a) Source #

combineSpecTypeSpec (Set a) → TypeSpec (Set a) → Spec (Set a) Source #

genFromTypeSpec ∷ ∀ (m ∷ TypeType). (HasCallStack, MonadGenError m) ⇒ TypeSpec (Set a) → GenT m (Set a) Source #

conformsToSet a → TypeSpec (Set a) → Bool Source #

toPredsTerm (Set a) → TypeSpec (Set a) → Pred Source #

guardTypeSpecTypeSpec (Set a) → Spec (Set a) Source #

(HasSpec a, HasSpec b) ⇒ HasSpec (Either a b) Source # 
Instance details

Defined in Test.Minimal.Model

Associated Types

type TypeSpec (Either a b) Source #

Methods

anySpecTypeSpec (Either a b) Source #

combineSpecTypeSpec (Either a b) → TypeSpec (Either a b) → Spec (Either a b) Source #

genFromTypeSpec ∷ ∀ (m ∷ TypeType). (HasCallStack, MonadGenError m) ⇒ TypeSpec (Either a b) → GenT m (Either a b) Source #

conformsToEither a b → TypeSpec (Either a b) → Bool Source #

toPredsTerm (Either a b) → TypeSpec (Either a b) → Pred Source #

guardTypeSpecTypeSpec (Either a b) → Spec (Either a b) Source #

(HasSpec a, HasSpec b) ⇒ HasSpec (a, b) Source # 
Instance details

Defined in Test.Minimal.Model

Associated Types

type TypeSpec (a, b) Source #

Methods

anySpecTypeSpec (a, b) Source #

combineSpecTypeSpec (a, b) → TypeSpec (a, b) → Spec (a, b) Source #

genFromTypeSpec ∷ ∀ (m ∷ TypeType). (HasCallStack, MonadGenError m) ⇒ TypeSpec (a, b) → GenT m (a, b) Source #

conformsTo ∷ (a, b) → TypeSpec (a, b) → Bool Source #

toPredsTerm (a, b) → TypeSpec (a, b) → Pred Source #

guardTypeSpecTypeSpec (a, b) → Spec (a, b) Source #

(HasSpec a, HasSpec b, HasSpec c) ⇒ HasSpec (Sum3 a b c) Source # 
Instance details

Defined in Test.Minimal.Tuple

Associated Types

type TypeSpec (Sum3 a b c) Source #

Methods

anySpecTypeSpec (Sum3 a b c) Source #

combineSpecTypeSpec (Sum3 a b c) → TypeSpec (Sum3 a b c) → Spec (Sum3 a b c) Source #

genFromTypeSpec ∷ ∀ (m ∷ TypeType). (HasCallStack, MonadGenError m) ⇒ TypeSpec (Sum3 a b c) → GenT m (Sum3 a b c) Source #

conformsToSum3 a b c → TypeSpec (Sum3 a b c) → Bool Source #

toPredsTerm (Sum3 a b c) → TypeSpec (Sum3 a b c) → Pred Source #

guardTypeSpecTypeSpec (Sum3 a b c) → Spec (Sum3 a b c) Source #

(HasSpec a, HasSpec b, HasSpec c) ⇒ HasSpec (a, b, c) Source # 
Instance details

Defined in Test.Minimal.Tuple

Associated Types

type TypeSpec (a, b, c) Source #

Methods

anySpecTypeSpec (a, b, c) Source #

combineSpecTypeSpec (a, b, c) → TypeSpec (a, b, c) → Spec (a, b, c) Source #

genFromTypeSpec ∷ ∀ (m ∷ TypeType). (HasCallStack, MonadGenError m) ⇒ TypeSpec (a, b, c) → GenT m (a, b, c) Source #

conformsTo ∷ (a, b, c) → TypeSpec (a, b, c) → Bool Source #

toPredsTerm (a, b, c) → TypeSpec (a, b, c) → Pred Source #

guardTypeSpecTypeSpec (a, b, c) → Spec (a, b, c) Source #

(HasSpec a, HasSpec b, HasSpec c, HasSpec d) ⇒ HasSpec (a, b, c, d) Source # 
Instance details

Defined in Test.Minimal.Tuple

Associated Types

type TypeSpec (a, b, c, d) Source #

Methods

anySpecTypeSpec (a, b, c, d) Source #

combineSpecTypeSpec (a, b, c, d) → TypeSpec (a, b, c, d) → Spec (a, b, c, d) Source #

genFromTypeSpec ∷ ∀ (m ∷ TypeType). (HasCallStack, MonadGenError m) ⇒ TypeSpec (a, b, c, d) → GenT m (a, b, c, d) Source #

conformsTo ∷ (a, b, c, d) → TypeSpec (a, b, c, d) → Bool Source #

toPredsTerm (a, b, c, d) → TypeSpec (a, b, c, d) → Pred Source #

guardTypeSpecTypeSpec (a, b, c, d) → Spec (a, b, c, d) Source #

data HOLE a b where Source #

Constructors

HOLEHOLE a a 

Instances

Instances details
Show (HOLE a b) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

showsPrecIntHOLE a b → ShowS #

showHOLE a b → String #

showList ∷ [HOLE a b] → ShowS #

data ListCtx (as ∷ [Type]) (c ∷ TypeType) where Source #

Note the arrows (n :|> hole) and (hole :<| n) always point towards the term with type `(c x)`, (i.e. hole in the picture above) where the target variable must occur.

Constructors

Unary ∷ c a → ListCtx '[a] c 
(:<|) ∷ c b → x → ListCtx '[b, x] c 
(:|>) ∷ x → c b → ListCtx '[x, b] c 

data Ctx v (a ∷ Type) where Source #

Constructors

CtxHoleHasSpec v ⇒ Ctx v v 
CtxApp ∷ (AppRequires fn as b, HasSpec b, TypeList as, Typeable as, All HasSpec as, Logic fn) ⇒ fn as b → ListCtx as (Ctx v) → Ctx v b 

fromListCtxAll HasSpec as ⇒ ListCtx as (HOLE a) → Term a → List Term as Source #

From a ListCtx, build a (List Term as), to which the function symbol can be applied. Hole becomes t, values become Lit .

propagateSpec ∷ ∀ v a. HasSpec v ⇒ Ctx v a → Spec a → Spec v Source #

toCtx ∷ ∀ m v a. (Typeable v, Show v, MonadGenError m, HasCallStack) ⇒ Var v → Term a → m (Ctx v a) Source #

toCtxList ∷ ∀ m v as. (Show v, Typeable v, MonadGenError m, HasCallStack) ⇒ StringVar v → List Term as → m (ListCtx as (Ctx v)) Source #

data WithPrec a Source #

Constructors

WithPrec Int a 

Instances

Instances details
HasSpec a ⇒ Pretty (WithPrec (Spec a)) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

prettyWithPrec (Spec a) → Doc ann Source #

prettyList ∷ [WithPrec (Spec a)] → Doc ann Source #

Pretty (WithPrec (Term a)) Source # 
Instance details

Defined in Test.Minimal.Base

Methods

prettyWithPrec (Term a) → Doc ann Source #

prettyList ∷ [WithPrec (Term a)] → Doc ann Source #

parensIfBoolDoc ann → Doc ann Source #

prettyPrecPretty (WithPrec a) ⇒ Int → a → Doc ann Source #

ppList ∷ ∀ f as ann. All HasSpec as ⇒ (∀ a. HasSpec a ⇒ f a → Doc ann) → List f as → [Doc ann] Source #

ppList_ ∷ ∀ f as ann. (∀ a. f a → Doc ann) → List f as → [Doc ann] Source #

prettyType ∷ ∀ t x. Typeable t ⇒ Doc x Source #

vsep' ∷ [Doc ann] → Doc ann Source #

(/>)Doc ann → Doc ann → Doc ann infixl 5 Source #

short ∷ ∀ a x. (Show a, Typeable a) ⇒ [a] → Doc x Source #

showType ∷ ∀ t. Typeable t ⇒ String Source #