Generating well-typed terms that are not "useless" [pdf]
lemonidas.github.io
lemonidas.github.io
> decoupling the generation of types and expressions significantly biases generation towards functions that do not use their arguments.
> Such “use-less” function arguments lead to wasted computation, both in terms of generation time (as the code that generates such arguments is essentially dead) and in terms of compilation time (as the test runner now needs to compile a larger program).
(Note that these are named in reference to SmallCheck[3], which takes the approach of enumerating concrete values in order of "size"; as an alternative to the more widely-used QuickCheck[4], which generates concrete values at random, and tries to "shrink" those which trigger a failure)
[1] https://hackage.haskell.org/package/lazysmallcheck
[2] https://github.com/UoYCS-plasma/LazySmallCheck2012
Love the Acknowledgement section.