The emgm package

[Tags: bsd3, library]

EMGM is a general-purpose library for generic programming with type classes.

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:

EMGM includes an important collection of datatypes (e.g. sum, product, and unit) and type classes (e.g. Generic and Rep). Everything you need for your own generic functions or datatypes can be found here.

These provide a wide range of functionality. For example, there is crush (Generics.EMGM.Functions.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.

Different generic functions work with different kinds of types as well. For example, collect (Generics.EMGM.Functions.Collect) works with any fully applied type while bimap (Generics.EMGM.Functions.Map) only works with bifunctor types such as Either or (,) (pairs).

EMGM provides full support for standard types such as [] (lists), tuples, and Maybe as well as many types you define in your own code. Using the Template Haskell functions provided in Generics.EMGM.Derive, it is very simple to add support for using generic functions with your datatype

For more information on EMGM, see


Versions0.1, 0.2, 0.3, 0.3.1, 0.4
Change logNone available
Dependenciesbase (>=3.0 && <4.0), HUnit (==1.2.*), QuickCheck (==2.1.*), template-haskell (>=2.2 && <2.4)
Copyright(c) 2008, 2009 Universiteit Utrecht
AuthorSean Leather, José Pedro Magalhães, Alexey Rodriguez, Andres Löh
Home page
UploadedTue Mar 3 11:21:43 UTC 2009 by SeanLeather
Downloads762 total (50 in last 30 days)
StatusDocs uploaded by user
Build status unknown [no reports yet]




testEnable the test configuration: Build the test executable, reduce build time.Disabled
hpcEnable program coverage on test executable.Disabled
nolibDon't build the library. This is useful for speeding up the modify-build-test loop. With "-ftest" (only), the build command will build both the library and the test executable. With "-ftest -fnolib", the build command builds only the test executable.Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainers' corner

For package maintainers and hackage trustees