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:
If you have cabal-install
, you should use that to install the package,
because it will handle everything for you:
cabal install regular
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
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
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/