Safe Haskell | None |
---|---|
Language | Haskell2010 |
Test.Goblin.Core
Description
The core typeclasses and associated methods of goblins.
Synopsis
- data GoblinData g = GoblinData {
- _genes :: !(Genome g)
- _bagOfTricks :: !(TypeRepMap [])
- class SeedGoblin a where
- class AddShrinks a where
- addShrinks :: a -> Gen a
- class GeneOps g where
- class (GeneOps g, Typeable a) => Goblin g a where
- type TinkerM g = State (GoblinData g)
- bagOfTricks :: forall g. Lens' (GoblinData g) (TypeRepMap [])
- genes :: forall g g. Lens (GoblinData g) (GoblinData g) (Genome g) (Genome g)
- saveInBagOfTricks :: forall g a. Typeable a => a -> TinkerM g a
- tinkerWithToys :: (AddShrinks a, Goblin g a) => [Gen a -> Gen a -> Gen a] -> Gen a -> TinkerM g (Gen a)
- tinkerRummagedOrConjureOrSave :: (Goblin g a, AddShrinks a) => TinkerM g (Gen a) -> TinkerM g (Gen a)
- transcribeGene :: TinkerM g g
- rummage :: forall a g. (GeneOps g, Typeable a) => TinkerM g (Maybe a)
- rummageAll :: forall a g. Typeable a => TinkerM g [a]
- rummageOrConjure :: forall a g. Goblin g a => TinkerM g a
- tinkerRummagedOrConjure :: forall a g. (Goblin g a, AddShrinks a) => TinkerM g (Gen a)
- shrinkEnum :: Enum a => a -> [a]
- mkGoblin :: Genome g -> TypeRepMap [] -> GoblinData g
- mkEmptyGoblin :: Genome g -> GoblinData g
- geneListIndex :: GeneOps g => [a] -> TinkerM g Int
- genPopulation :: Gen (Population Bool)
- (<$$>) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
- (<**>) :: (Applicative f, Applicative g) => f (g (a -> b)) -> f (g a) -> f (g b)
Documentation
data GoblinData g Source #
The state we carry as we perform goblins actions.
Constructors
GoblinData | |
Fields
|
class SeedGoblin a where Source #
Recur down a datatype, adding the sub-datatypes to the TinkerM
TypeRepMap
Minimal complete definition
Nothing
Instances
class AddShrinks a where Source #
Whereas pure
creates a Hedgehog tree with no shrinks, addShrinks
creates a tree with shrinks.
Minimal complete definition
Nothing
Instances
AddShrinks Bool Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks Char Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks Double Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks Int Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks Integer Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks Natural Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks Word8 Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks Word64 Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks () Source # | |
Defined in Test.Goblin.Instances Methods addShrinks :: () -> Gen () Source # | |
AddShrinks a => AddShrinks [a] Source # | |
Defined in Test.Goblin.Instances Methods addShrinks :: [a] -> Gen [a] Source # | |
AddShrinks a => AddShrinks (Maybe a) Source # | |
Defined in Test.Goblin.Instances | |
AddShrinks arg => AddShrinks (Ratio arg) Source # | |
Defined in Test.Goblin.Instances | |
(AddShrinks a, Ord a) => AddShrinks (Set a) Source # | |
Defined in Test.Goblin.Instances | |
(AddShrinks arg1, AddShrinks arg2) => AddShrinks (arg1, arg2) Source # | |
Defined in Test.Goblin.Instances Methods addShrinks :: (arg1, arg2) -> Gen (arg1, arg2) Source # | |
(AddShrinks k, Ord k, AddShrinks v) => AddShrinks (Map k v) Source # | |
Defined in Test.Goblin.Instances | |
(AddShrinks arg1, AddShrinks arg2, AddShrinks arg3) => AddShrinks (arg1, arg2, arg3) Source # | |
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 # | |
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 # | |
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 # | |
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 # | |
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 # | |
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 # | |
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 # | |
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 # | |
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.
class (GeneOps g, Typeable a) => Goblin g a where Source #
The interface to goblins. This class defines two actions
- tinker
ing with an existing value
- conjure
ing 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
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 |
GeneOps a => Goblin a Word64 Source # | |
GeneOps a => Goblin a Int Source # | |
GeneOps a => Goblin a Natural Source # | |
GeneOps a => Goblin a Integer Source # | |
GeneOps a => Goblin a Char Source # | |
GeneOps a => Goblin a Bool Source # | |
(Goblin genome arg, AddShrinks arg) => Goblin genome (Ratio arg) Source # | |
(Goblin g a, Ord a, AddShrinks a, Typeable a) => Goblin 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. |
(Goblin g a, AddShrinks a) => Goblin g (Maybe a) Source # | |
(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2) => Goblin 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 # | |
(Goblin genome arg1, AddShrinks arg1, Goblin genome arg2, AddShrinks arg2, Goblin genome arg3, AddShrinks arg3) => Goblin 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 # | |
(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 # | |
(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 # | |
(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 # | |
(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 # | |
(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 # | |
(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 # | |
Defined in Test.Goblin.Instances | |
(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 # | |
Defined in Test.Goblin.Instances |
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.