Feat is a library that offers support for counting, enumerating, and sampling
objects of a certain kind, such as (say) the inhabitants of an algebraic data
Feat was inspired by the paper
Feat: Functional Enumeration of Algebraic Types
by Jonas Duregård, Patrik Jansson and Meng Wang (2012).
It can perhaps be compared with the Haskell library
although a detailed comparison has not been carried out.
The library is laid out as follows:
These sequences are implicit, which means that they are not explicitly
epresented in memory as an actual sequence of elements; instead, they are
described by a data structure which contains enough information to
produce an arbitrary element upon request. This design decision imposes
some constraints on the operations that can be efficiently supported; for
filteris not supported.
The module Feat.Enum implements
An enumeration of type
'a enumis a function of a size
to a sequence of elements of size
The module Feat.Bigint
offers a function
Z.t -> Z.t,
thus repairing an unfortunate omission in the library