This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.
BSD-3-Clause licensed by Sean Leather,
José Pedro Magalhães,
Alexey Rodriguez,
Andres Löh
EMGM is a general-purpose library for datatype-generic programming.
The design is based on the idea of modeling algebraic datatypes as
sum-of-product structures. Many datatypes can be modeled this way, and
because they all share a common structure, we can write generic functions that
work on this structure.
The primary features of the library are:
A foundation for building generic functions. EMGM includes a collection of
datatypes (e.g. sum, product, and unit) and type classes (e.g. Generic and
Rep). Everything you need for defining generic functions and supporting
datatypes can be found here.
Many useful generic functions. These provide a wide range of
functionality. For example, there is crush, a generalization of the
foldl/foldr functions, that allows you to flexibly extract the elements of a
polymorphic container. Now, you can do many of the operations with your
container that were previously only available for lists.
Support for standard datatypes. EMGM supports standard types: primitives
(e.g. Int and Float), Bool, lists, tuples, Maybe, etc.
NOTE: As of version 0.4, this library does not have Template Haskell for
generating the representation. We are working on another library for a
solution to this problem.