emgm
Version 0.3 revision 0 uploaded by SeanLeather.
Package meta
- Synopsis
- Extensible and Modular Generics for the Masses
- Description
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:
A platform for building generic functions and adding support for user-defined datatypes.
EMGM includes an important collection of datatypes (e.g. sum, product, and unit) and type classes (e.g.
Generic
andRep
). Everything you need for your own generic functions or datatypes can be found here.Many useful generic functions.
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 whilebimap
(Generics.EMGM.Functions.Map) only works with bifunctor types such asEither
or(,)
(pairs).Support for standard and user-defined datatypes.
EMGM provides full support for standard types such as
[]
(lists), tuples, andMaybe
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 datatypeFor more information on EMGM, see http://www.cs.uu.nl/wiki/GenericProgramming/EMGM
- Author
- Sean Leather, José Pedro Magalhães, Alexey Rodriguez, Andres Löh
- Bug reports
- n/a
- Category
- Generics
- Copyright
- (c) 2008, 2009 Universiteit Utrecht
- Homepage
- http://www.cs.uu.nl/wiki/GenericProgramming/EMGM
- Maintainer
- generics@haskell.org
- Package URL
- n/a
- Stability
- experimental