name: emgm version: 0.3 synopsis: Extensible and Modular Generics for the Masses homepage: http://www.cs.uu.nl/wiki/GenericProgramming/EMGM 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@ and @Rep@). 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 while @bimap@ ("Generics.EMGM.Functions.Map") only works with bifunctor types such as @Either@ or @(,)@ (pairs). . * /Support for standard and user-defined datatypes./ . 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 category: Generics copyright: (c) 2008, 2009 Universiteit Utrecht license: BSD3 license-file: LICENSE author: Sean Leather, José Pedro Magalhães, Alexey Rodriguez, Andres Löh maintainer: generics@haskell.org stability: experimental extra-source-files: README, examples/Ex00StartHere.hs, examples/Ex01UsingFunctions.hs, examples/Ex02AddingDatatypeSupport.hs, examples/Ex03DefiningFunctions.hs, tests/Base.hs, tests/Bimap.hs, tests/Collect.hs, tests/Compare.hs, tests/Crush.hs, tests/Derive.hs, tests/Enum.hs, tests/Everywhere.hs, tests/Main.hs, tests/Map.hs, tests/ReadShow.hs, tests/TTree.hs, tests/UnzipWith.hs, tests/ZipWith.hs, util/hpc.lhs extra-tmp-files: .hpc build-type: Custom cabal-version: >= 1.2.1 tested-with: GHC == 6.8.3, GHC == 6.10.1 -------------------------------------------------------------------------------- flag test description: Enable the test configuration: Build the test executable, reduce build time. default: False flag hpc description: Enable program coverage on test executable. default: False flag nolib description: Don'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. default: False -------------------------------------------------------------------------------- Library hs-source-dirs: src exposed-modules: Generics.EMGM -- Common foundation Generics.EMGM.Common Generics.EMGM.Common.Representation Generics.EMGM.Common.Base Generics.EMGM.Common.Base2 Generics.EMGM.Common.Base3 -- Generic functions Generics.EMGM.Functions Generics.EMGM.Functions.Collect Generics.EMGM.Functions.Compare Generics.EMGM.Functions.Crush Generics.EMGM.Functions.Enum Generics.EMGM.Functions.Everywhere Generics.EMGM.Functions.Map Generics.EMGM.Functions.Read Generics.EMGM.Functions.Show Generics.EMGM.Functions.ZipWith Generics.EMGM.Functions.UnzipWith -- Supported datatypes Generics.EMGM.Data.Bool Generics.EMGM.Data.Either Generics.EMGM.Data.List Generics.EMGM.Data.Maybe Generics.EMGM.Data.Tuple Generics.EMGM.Data.TH -- Deriving Generics.EMGM.Derive other-modules: Generics.EMGM.Derive.Common Generics.EMGM.Derive.ConDescr Generics.EMGM.Derive.EP Generics.EMGM.Derive.Functions Generics.EMGM.Derive.Instance Generics.EMGM.Derive.Internal build-depends: base >= 3.0 && < 4.0, template-haskell >= 2.2 && < 2.4 extensions: CPP ghc-options: -Wall if flag(test) -- Faster build ghc-options: -O0 else -- Smaller binary, more optimized? ghc-options: -O2 -- This adds even more optimization, but slows the build down a lot (e.g. -- 5x) I think we shouldn't use it unless we can prove the benefit. [SPL] --ghc-options: -fvia-C -optc-O3 -- Don't build the library if flag(nolib) buildable: False -------------------------------------------------------------------------------- Executable test hs-source-dirs: src, tests, examples other-modules: Generics.EMGM extensions: CPP main-is: Main.hs build-depends: base >= 3.0 && < 4.0, template-haskell >= 2.2 && < 2.4 -- Only enable the build-depends here if configured with "-ftest". This -- allows users to use EMGM without having to install QuickCheck. if flag(test) build-depends: QuickCheck >= 2.1 && < 2.2, HUnit >= 1.2 && < 1.3 else buildable: False ghc-options: -Wall -O0 -fno-warn-missing-signatures -- Add program coverage if configured with "-fhpc". if flag(hpc) ghc-options: -fhpc