Regular
GenericProgramming
Introduction
Many generic programs require information about the recursive positions
of a datatype. Examples include the generic fold, generic rewriting, and
the Zipper data structure. This approach provides a fixed point view on
data which allows these definitions for regular datatypes. It can be seen
as a simplification of the
Multirec library,
which provides similar functionality but for families of (possibly mutually recursive) datatypes.
This library is the underlying generic representation mechanism in the paper:
Thomas van Noort, Alexey Rodriguez, Stefan Holdermans, Johan Jeuring,
Bastiaan Heeren.
A Lightweight Approach to Datatype-Generic Rewriting.
In Ralf Hinze and Don Syme, editors, Proceedings of the ACM SIGPLAN Workshop
on Generic Programming, WGP 2008, Victoria, BC, Canada, September 20, 2008,
pages 13–24. ACM Press, 2008.
Together with the core library and generic functions, we also provide an extra package, regular-extras, with additional functionality (dependent on other packages). Currently these extra functions are:
Download
If you have cabal-install, you should use that to install the package,
because it will handle everything for you:
cabal install regular
or
cabal install regular-extras
If you don't have cabal-install, you must download the
regular package and the
regular-extras package from HackageDB and install them manually. Get the
tar.gz files and decompress them.
Once downloaded, use the following commands for configuring, building, and installing the library:
runghc Setup configure
runghc Setup build
runghc Setup install
For more details on the general options available, refer to the
Cabal User's Guide.
Source
The source for this library can be downloaded from the
Subversion repository as follows:
svn checkout https://subversion.cs.uu.nl/repos/project.dgp-haskell.libraries/regular/trunk/