Things to be done
Todo
Almost every section here should have a reference to some section in reference/contributors for technical explanations.
Todo
Maybe, more realistic example, e.g. alternating list of e.g. Nats and Strings.
Todo
We definitely need more examples of particular derivation tasks and corresponding signatures here.
Examples should contain:
trivial examples for non-recursive data type with no type arguments;
examples for recursive data type with no type arguments, like
Nat;examples for a data type with some non-dependent type arguments (i.e. when no type argument does not depend on another); all variants of “all given”, “all generated”, “some given, some generated” should be present;
example for a data type with dependent type arguments.
Todo
least-effort strategy and the company
Todo
relativity of these terms to the derivation task
Todo
staff from limitations
Todo
more constructor derivator tactics
Todo
“caching” derived generators (for similar derivation tasks)
Todo
tuning of generators combinators
Todo
support of external generators from the context of derivation, not from the context of generation
Todo
getting rid of fuel pattern
Todo
wider class of data structures which are supporrted for automatic derivation
Todo
Generator on very high level of abstraction is a calculation of a value (or values) of some particular type in particular context.
Todo
comparison to the design of QuickCheck and Hedgehog (in particular, in shrinking)
Todo
why generators must support emptiness (take example from the readme)
Todo
emptiness marking preservation in combinations
Todo
“type aliases” for most useful generators types (two of three, ha-ha)
Todo
Value, or maybe value (depending on emptiness)
Todo
Random nature of generation
Todo
finiteness of generators
Todo
fuel-pattern as a workaround for infinite datatypes
Todo
end user usability
entry-point functions for actual running (like
quickcheck,check,forAll, etc.)smart comparison functions (like
===,shouldNotContain, etc.)nice violation diff printing of comparison functions
Todo
staff from limitations
Todo
explicit shuffling
Todo
support of shrinking or similar directed mutations
Todo
tuning of combinations of generators
Todo
proving or testing of laws of existing combination upon generators
Todo
co-generators or similar stuff for generation of functions; research of how this applies to dependently types functions
Todo
Technical descriptions on how this or that part is implemented
Todo
Info on how this or that part of the derivation facility is implemented. Think of useful sections below
Todo
how derivation task is represented internally
Todo
how do we implement closure of derived generators using local StateT
Todo
how do we analyse which constructors are (mutually) recursive
Todo
DeriveBodyForType and DeriveBodyForCon interfaces, their role and design
Todo
An approach on how do we analyse which arguments depend on which in constructors
Todo
How do we calculate in which order arguments should be generated. Three phases of generation:
first right-to-left phase
left-to-right phase
second right-to-left phase
Todo
On how
Genmonad internals.Generalised generation with random seed.
Specialised cases for
pureandempty.Fusion during
map,<*>and>>=.
Todo
Add some glue text
Todo
Technical description of the entry derivation function.
Todo
Technical description of the derivation elaboration script.
Todo
Technical description of the Gen monad
Todo
Technical description of functions used for formulating tested properties and for running property checks.