@hackage emgm0.4

Extensible and Modular Generics for the Masses

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.