package feat-core
Install
Dune Dependency
Authors
Maintainers
Sources
md5=f8548ba0792a07d2b72c7894d1089d5e
sha512=6c53ad4f898c074b888018269fe2c00bf001fb5b22ceade1e7e26479fbe9ef55fe97d04a757b10232565a6af8f51d960b6f5f494552df4205aba046b075c513b
Description
Published: 25 Dec 2021
README
Feat
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 type.
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 testing-feat, although a detailed comparison has not been carried out.
Two packages, feat
and feat-num
, offer the same API. feat
relies on the big integer library zarith
, whereas feat-num
relies on the library num
. Both packages offer the same API: the main module (named Feat
or FeatNum
) offers three submodules named Num
, IFSeq
, and Enum
.
The submodule
Num
implements a small set of operations on big integers.The submodule
IFSeq
implements the signature IFSEQ_EXTENDED of (implicit, finite) sequences.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 instance,
filter
is not supported.The submodule
Enum
implements the signature ENUM of enumerations. An enumeration of type'a enum
is a function of a sizes
to a sequence of elements of sizes
.The external library Fix comes in handy when building enumerations of recursive algebraic data types: see the demo.