A Haskell library is designed to provide extensible and modular generics that can be used by a large number of users.
The library consists of three main components: Common, Data, and Functions. The Common component serves as a foundation for users to build their own generic functions and add support for new datatypes. This component includes the collection of datatypes (such as sum, product, and unit) and type classes (e.g. Generic and Rep) that are used throughout the library.
The Data component offers support for using standard datatypes generically, including types such as [a], tuples, and Maybe. This component is also helpful when adding generic support for a user's own datatypes.
The Functions component is essentially a collection of useful generic functions. These functions work with a variety of datatypes and provide a wide range of operations. For example, the crush function is one of the most useful in this component, as it is a generalization of the fold functions, and allows users to extract elements of a polymorphic container in a flexible manner.
EMGM is a powerful tool for generic programming in Haskell, providing a truly useful and flexible library that is well-structured and easy to use. The library is an asset for developers looking to work with algebraic datatypes and develop reusable code, and its open source nature ensures that it is constantly evolving and improving.
Version 0.3.1: N/A