goblins-0.2.0.0: Genetic algorithm based randomised testing
Safe HaskellNone
LanguageHaskell2010

Test.Goblin.Core

Description

The core typeclasses and associated methods of goblins.

Synopsis

Documentation

data GoblinData g Source #

The state we carry as we perform goblins actions.

Constructors

GoblinData 

Fields

  • _genes :: !(Genome g)

    Remaining genes, controlling how a goblin operates.

  • _bagOfTricks :: !(TypeRepMap [])

    A goblin's bag of tricks contains items of many differnt types. When tinkering, a goblin (depending on its genome) might look in its bag of tricks to see whether it has anything of the appropriate type to replace what it's currently tinkering with (or, depending on the type, do something different - for example, utilise a monoid instance to add things together).

class SeedGoblin a where Source #

Recur down a datatype, adding the sub-datatypes to the TinkerM TypeRepMap

Minimal complete definition

Nothing

Methods

seeder :: a -> TinkerM g () Source #

Recur down a type, adding elements to the TypeRepMap

default seeder :: Typeable a => a -> TinkerM g () Source #

Instances

Instances details
SeedGoblin Bool Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Bool -> TinkerM g () Source #

SeedGoblin Char Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Char -> TinkerM g () Source #

SeedGoblin Double Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Double -> TinkerM g () Source #

SeedGoblin Int Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Int -> TinkerM g () Source #

SeedGoblin Integer Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Integer -> TinkerM g () Source #

SeedGoblin Natural Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Natural -> TinkerM g () Source #

SeedGoblin Word8 Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Word8 -> TinkerM g () Source #

SeedGoblin Word64 Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Word64 -> TinkerM g () Source #

SeedGoblin () Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: () -> TinkerM g () Source #

(SeedGoblin a, Typeable a) => SeedGoblin [a] Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: [a] -> TinkerM g () Source #

(SeedGoblin a, Typeable a) => SeedGoblin (Maybe a) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Maybe a -> TinkerM g () Source #

(SeedGoblin a, Typeable a) => SeedGoblin (Seq a) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Seq a -> TinkerM g () Source #

(SeedGoblin a, Typeable a) => SeedGoblin (Set a) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Set a -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2) => SeedGoblin (arg1, arg2) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2) -> TinkerM g () Source #

(SeedGoblin a, Typeable a, SeedGoblin b, Typeable b) => SeedGoblin (Map a b) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Map a b -> TinkerM g () Source #

(SeedGoblin a, Typeable a, SeedGoblin b, Typeable b) => SeedGoblin (Bimap a b) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: Bimap a b -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3) => SeedGoblin (arg1, arg2, arg3) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3) -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3, SeedGoblin arg4, Typeable arg4) => SeedGoblin (arg1, arg2, arg3, arg4) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3, arg4) -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3, SeedGoblin arg4, Typeable arg4, SeedGoblin arg5, Typeable arg5) => SeedGoblin (arg1, arg2, arg3, arg4, arg5) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3, arg4, arg5) -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3, SeedGoblin arg4, Typeable arg4, SeedGoblin arg5, Typeable arg5, SeedGoblin arg6, Typeable arg6) => SeedGoblin (arg1, arg2, arg3, arg4, arg5, arg6) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3, arg4, arg5, arg6) -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3, SeedGoblin arg4, Typeable arg4, SeedGoblin arg5, Typeable arg5, SeedGoblin arg6, Typeable arg6, SeedGoblin arg7, Typeable arg7) => SeedGoblin (arg1, arg2, arg3, arg4, arg5, arg6, arg7) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3, SeedGoblin arg4, Typeable arg4, SeedGoblin arg5, Typeable arg5, SeedGoblin arg6, Typeable arg6, SeedGoblin arg7, Typeable arg7, SeedGoblin arg8, Typeable arg8) => SeedGoblin (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3, SeedGoblin arg4, Typeable arg4, SeedGoblin arg5, Typeable arg5, SeedGoblin arg6, Typeable arg6, SeedGoblin arg7, Typeable arg7, SeedGoblin arg8, Typeable arg8, SeedGoblin arg9, Typeable arg9) => SeedGoblin (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3, SeedGoblin arg4, Typeable arg4, SeedGoblin arg5, Typeable arg5, SeedGoblin arg6, Typeable arg6, SeedGoblin arg7, Typeable arg7, SeedGoblin arg8, Typeable arg8, SeedGoblin arg9, Typeable arg9, SeedGoblin arg10, Typeable arg10) => SeedGoblin (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) -> TinkerM g () Source #

(SeedGoblin arg1, Typeable arg1, SeedGoblin arg2, Typeable arg2, SeedGoblin arg3, Typeable arg3, SeedGoblin arg4, Typeable arg4, SeedGoblin arg5, Typeable arg5, SeedGoblin arg6, Typeable arg6, SeedGoblin arg7, Typeable arg7, SeedGoblin arg8, Typeable arg8, SeedGoblin arg9, Typeable arg9, SeedGoblin arg10, Typeable arg10, SeedGoblin arg11, Typeable arg11) => SeedGoblin (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

seeder :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) -> TinkerM g () Source #

class AddShrinks a where Source #

Whereas pure creates a Hedgehog tree with no shrinks, addShrinks creates a tree with shrinks.

Minimal complete definition

Nothing

Methods

addShrinks :: a -> Gen a Source #

default addShrinks :: Enum a => a -> Gen a Source #

Instances

Instances details
AddShrinks Bool Source # 
Instance details

Defined in Test.Goblin.Instances

AddShrinks Char Source # 
Instance details

Defined in Test.Goblin.Instances

AddShrinks Double Source # 
Instance details

Defined in Test.Goblin.Instances

AddShrinks Int Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: Int -> Gen Int Source #

AddShrinks Integer Source # 
Instance details

Defined in Test.Goblin.Instances

AddShrinks Natural Source # 
Instance details

Defined in Test.Goblin.Instances

AddShrinks Word8 Source # 
Instance details

Defined in Test.Goblin.Instances

AddShrinks Word64 Source # 
Instance details

Defined in Test.Goblin.Instances

AddShrinks () Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: () -> Gen () Source #

AddShrinks a => AddShrinks [a] Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: [a] -> Gen [a] Source #

AddShrinks a => AddShrinks (Maybe a) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: Maybe a -> Gen (Maybe a) Source #

AddShrinks arg => AddShrinks (Ratio arg) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: Ratio arg -> Gen (Ratio arg) Source #

(AddShrinks a, Ord a) => AddShrinks (Set a) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: Set a -> Gen (Set a) Source #

(AddShrinks arg1, AddShrinks arg2) => AddShrinks (arg1, arg2) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2) -> Gen (arg1, arg2) Source #

(AddShrinks k, Ord k, AddShrinks v) => AddShrinks (Map k v) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: Map k v -> Gen (Map k v) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3) => AddShrinks (arg1, arg2, arg3) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3) -> Gen (arg1, arg2, arg3) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3, AddShrinks arg4) => AddShrinks (arg1, arg2, arg3, arg4) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3, arg4) -> Gen (arg1, arg2, arg3, arg4) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3, AddShrinks arg4, AddShrinks arg5) => AddShrinks (arg1, arg2, arg3, arg4, arg5) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3, arg4, arg5) -> Gen (arg1, arg2, arg3, arg4, arg5) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3, AddShrinks arg4, AddShrinks arg5, AddShrinks arg6) => AddShrinks (arg1, arg2, arg3, arg4, arg5, arg6) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3, arg4, arg5, arg6) -> Gen (arg1, arg2, arg3, arg4, arg5, arg6) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3, AddShrinks arg4, AddShrinks arg5, AddShrinks arg6, AddShrinks arg7) => AddShrinks (arg1, arg2, arg3, arg4, arg5, arg6, arg7) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3, AddShrinks arg4, AddShrinks arg5, AddShrinks arg6, AddShrinks arg7, AddShrinks arg8) => AddShrinks (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3, AddShrinks arg4, AddShrinks arg5, AddShrinks arg6, AddShrinks arg7, AddShrinks arg8, AddShrinks arg9) => AddShrinks (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) -> Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3, AddShrinks arg4, AddShrinks arg5, AddShrinks arg6, AddShrinks arg7, AddShrinks arg8, AddShrinks arg9, AddShrinks arg10) => AddShrinks (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) -> Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) Source #

(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3, AddShrinks arg4, AddShrinks arg5, AddShrinks arg6, AddShrinks arg7, AddShrinks arg8, AddShrinks arg9, AddShrinks arg10, AddShrinks arg11) => AddShrinks (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

addShrinks :: (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) -> Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) Source #

class GeneOps g where Source #

A typeclass for actions over genomes.

Methods

onGene Source #

Arguments

:: TinkerM g a

When gene is on.

-> TinkerM g a

When gene is off.

-> TinkerM g a 

Choose between two actions based on the value of a gene.

transcribeGenesAsInt :: Int -> TinkerM g Int Source #

Transcribe sufficient genes to get an integer in the range [0..n].

Instances

Instances details
GeneOps Bool Source # 
Instance details

Defined in Test.Goblin.Instances

class (GeneOps g, Typeable a) => Goblin g a where Source #

The interface to goblins. This class defines two actions - tinkering with an existing value - conjureing a new value

Methods

tinker :: Gen a -> TinkerM g (Gen a) Source #

Tinker with an item of type a.

conjure :: TinkerM g a Source #

As well as tinkering, goblins can conjure fresh items into existence.

Instances

Instances details
GeneOps a => Goblin a Double Source #

This instance generates Double values in range 0..1 at 0.01 increments. 0.01, 0.02 ... 0.99, 1.00

Instance details

Defined in Test.Goblin.Instances

GeneOps a => Goblin a Word64 Source # 
Instance details

Defined in Test.Goblin.Instances

GeneOps a => Goblin a Int Source # 
Instance details

Defined in Test.Goblin.Instances

GeneOps a => Goblin a Natural Source # 
Instance details

Defined in Test.Goblin.Instances

GeneOps a => Goblin a Integer Source # 
Instance details

Defined in Test.Goblin.Instances

GeneOps a => Goblin a Char Source # 
Instance details

Defined in Test.Goblin.Instances

GeneOps a => Goblin a Bool Source # 
Instance details

Defined in Test.Goblin.Instances

(Goblin genome arg, AddShrinks arg) => Goblin genome (Ratio arg) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (Ratio arg) -> TinkerM genome (Gen (Ratio arg)) Source #

conjure :: TinkerM genome (Ratio arg) Source #

(Goblin g a, Ord a, AddShrinks a, Typeable a) => Goblin g (Set a) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (Set a) -> TinkerM g (Gen (Set a)) Source #

conjure :: TinkerM g (Set a) Source #

(AddShrinks a, Eq a, Typeable a, GeneOps g, Goblin g a) => Goblin g [a] Source #

Our list goblin behaves slightly differently, since it pulls whole lists of things from the bag of tricks, and is also specialised to do some more messing about with lists.

Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen [a] -> TinkerM g (Gen [a]) Source #

conjure :: TinkerM g [a] Source #

(Goblin g a, AddShrinks a) => Goblin g (Maybe a) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (Maybe a) -> TinkerM g (Gen (Maybe a)) Source #

conjure :: TinkerM g (Maybe a) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2) => Goblin genome (arg1, arg2) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2) -> TinkerM genome (Gen (arg1, arg2)) Source #

conjure :: TinkerM genome (arg1, arg2) Source #

(Goblin g k, Goblin g v, Ord k, Eq k, Eq v, AddShrinks (Map k v), AddShrinks k, AddShrinks v, Typeable k, Typeable v) => Goblin g (Map k v) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (Map k v) -> TinkerM g (Gen (Map k v)) Source #

conjure :: TinkerM g (Map k v) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3) => Goblin genome (arg1, arg2, arg3) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3) -> TinkerM genome (Gen (arg1, arg2, arg3)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3, Goblin genome arg4, AddShrinks arg4) => Goblin genome (arg1, arg2, arg3, arg4) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3, arg4) -> TinkerM genome (Gen (arg1, arg2, arg3, arg4)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3, arg4) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3, Goblin genome arg4, AddShrinks arg4, Goblin genome arg5, AddShrinks arg5) => Goblin genome (arg1, arg2, arg3, arg4, arg5) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3, arg4, arg5) -> TinkerM genome (Gen (arg1, arg2, arg3, arg4, arg5)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3, arg4, arg5) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3, Goblin genome arg4, AddShrinks arg4, Goblin genome arg5, AddShrinks arg5, Goblin genome arg6, AddShrinks arg6) => Goblin genome (arg1, arg2, arg3, arg4, arg5, arg6) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3, arg4, arg5, arg6) -> TinkerM genome (Gen (arg1, arg2, arg3, arg4, arg5, arg6)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3, arg4, arg5, arg6) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3, Goblin genome arg4, AddShrinks arg4, Goblin genome arg5, AddShrinks arg5, Goblin genome arg6, AddShrinks arg6, Goblin genome arg7, AddShrinks arg7) => Goblin genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> TinkerM genome (Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3, Goblin genome arg4, AddShrinks arg4, Goblin genome arg5, AddShrinks arg5, Goblin genome arg6, AddShrinks arg6, Goblin genome arg7, AddShrinks arg7, Goblin genome arg8, AddShrinks arg8) => Goblin genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> TinkerM genome (Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3, Goblin genome arg4, AddShrinks arg4, Goblin genome arg5, AddShrinks arg5, Goblin genome arg6, AddShrinks arg6, Goblin genome arg7, AddShrinks arg7, Goblin genome arg8, AddShrinks arg8, Goblin genome arg9, AddShrinks arg9) => Goblin genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) -> TinkerM genome (Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3, Goblin genome arg4, AddShrinks arg4, Goblin genome arg5, AddShrinks arg5, Goblin genome arg6, AddShrinks arg6, Goblin genome arg7, AddShrinks arg7, Goblin genome arg8, AddShrinks arg8, Goblin genome arg9, AddShrinks arg9, Goblin genome arg10, AddShrinks arg10) => Goblin genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) -> TinkerM genome (Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) Source #

(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3, Goblin genome arg4, AddShrinks arg4, Goblin genome arg5, AddShrinks arg5, Goblin genome arg6, AddShrinks arg6, Goblin genome arg7, AddShrinks arg7, Goblin genome arg8, AddShrinks arg8, Goblin genome arg9, AddShrinks arg9, Goblin genome arg10, AddShrinks arg10, Goblin genome arg11, AddShrinks arg11) => Goblin genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) Source # 
Instance details

Defined in Test.Goblin.Instances

Methods

tinker :: Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) -> TinkerM genome (Gen (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11)) Source #

conjure :: TinkerM genome (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) Source #

type TinkerM g = State (GoblinData g) Source #

Tinker monad.

bagOfTricks :: forall g. Lens' (GoblinData g) (TypeRepMap []) Source #

genes :: forall g g. Lens (GoblinData g) (GoblinData g) (Genome g) (Genome g) Source #

saveInBagOfTricks :: forall g a. Typeable a => a -> TinkerM g a Source #

Helper function to save a value in the bagOfTricks, and return it.

tinkerWithToys :: (AddShrinks a, Goblin g a) => [Gen a -> Gen a -> Gen a] -> Gen a -> TinkerM g (Gen a) Source #

Construct a tinker function given a set of possible things to do.

Each toy is a function taking the original value and one grabbed from the bag of tricks or conjured.

tinkerRummagedOrConjureOrSave :: (Goblin g a, AddShrinks a) => TinkerM g (Gen a) -> TinkerM g (Gen a) Source #

Either tinker with a rummaged value, conjure a new value, or save the argument in the bagOfTricks and return it.

transcribeGene :: TinkerM g g Source #

Read (and consume) a gene from the genome.

rummage :: forall a g. (GeneOps g, Typeable a) => TinkerM g (Maybe a) Source #

Fetch something from the bag of tricks if there's something there.

rummageAll :: forall a g. Typeable a => TinkerM g [a] Source #

Fetch everything from the bag of tricks.

rummageOrConjure :: forall a g. Goblin g a => TinkerM g a Source #

Fetch something from the bag of tricks, or else conjure it up.

tinkerRummagedOrConjure :: forall a g. (Goblin g a, AddShrinks a) => TinkerM g (Gen a) Source #

Attempt to rummage. If a value is available, either tinker with it or leave it intact. If no value is available, conjure a fresh one and add shrinks to it.

shrinkEnum :: Enum a => a -> [a] Source #

Use an Enum instance to create a shrink tree which shrinks towards `toEnum 0`.

mkGoblin :: Genome g -> TypeRepMap [] -> GoblinData g Source #

Spawn a goblin from a given genome and a bag of tricks.

mkEmptyGoblin :: Genome g -> GoblinData g Source #

Spawn a goblin from a genome, with an empty TypeRepMap.

geneListIndex :: GeneOps g => [a] -> TinkerM g Int Source #

Use the genome to generate an index within the bounds of the provided list.

genPopulation :: Gen (Population Bool) Source #

Convenience Hedgehog generator.

(<$$>) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) Source #

<$> through nested functors.

(<**>) :: (Applicative f, Applicative g) => f (g (a -> b)) -> f (g a) -> f (g b) Source #

<*> through nested functors.