emgm: Extensible and Modular Generics for the Masses

[ bsd3, generics, library ] [ Propose Tags ]

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.

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1, 0.2, 0.3, 0.3.1, 0.4
Dependencies base (>=3.0 && <5.0) [details]
License BSD-3-Clause
Copyright (c) 2008 - 2011 Universiteit Utrecht
Author Sean Leather, José Pedro Magalhães, Alexey Rodriguez, Andres Löh
Maintainer generics@haskell.org
Category Generics
Home page http://www.cs.uu.nl/wiki/GenericProgramming/EMGM
Source repo head: git clone git://github.com/spl/emgm.git
Uploaded by SeanLeather at 2011-09-21T15:58:05Z
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 4216 total (12 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for emgm-0.4

[back to package description]

Extensible and Modular Generics for the Masses

Extensible and Modular Generics for the Masses (EMGM) is a library for generic programming in Haskell.


The primary features of EMGM include:

  • Datatype-generic programming using sum-of-product views
  • Large collection of ready-to-use generic functions
  • Included support for standard datatypes: lists, Maybe, tuples
  • Easy to add support for new datatypes
  • Type classes make writing new functions straightforward in a structurally inductive style
  • Generic functions are extensible with ad-hoc cases for arbitrary datatypes
  • Good performance of generic functions

The features of this distribution include:

  • The API is thoroughly documented with Haddock
  • Fully tested with QuickCheck and HUnit
  • Program coverage ensures that all useful code has been touched by tests


You can find examples of using EMGM in the examples directory of the source distribution.

Bugs & Support

To report bugs, use the Google Code project page for EMGM.

For general concerns and questions, use the Generics mailing list.