multirec: Generic programming for families of recursive datatypes

[ bsd3, generics, library ] [ Propose Tags ]

Many generic programs require information about the recursive positions of a datatype. Examples include the generic fold, generic rewriting or the Zipper data structure. Several generic programming systems allow to write such functions by viewing datatypes as fixed points of a pattern functor. Traditionally, this view has been limited to so-called regular datatypes such as lists and binary trees. In particular, families of mutually recursive datatypes have been excluded.

With the multirec library, we provide a mechanism to talk about fixed points of families of datatypes that may be mutually recursive. On top of this representations, generic functions such as the fold or the Zipper can then be defined.

We expect that the library will be especially interesting for compiler writers, because ASTs are typically families of mutually recursive datatypes, and with multirec it becomes easy to write generic functions on ASTs.

The library is based on ideas described in the paper:

Versions [faq] 0.1, 0.2, 0.3, 0.4, 0.4.1, 0.5, 0.5.1, 0.6, 0.7, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.7.7, 0.7.8, 0.7.9
Dependencies base (>=3.0 && <5), template-haskell (>=2.4 && <2.11) [details]
License BSD-3-Clause
Author Alexey Rodriguez, Stefan Holdermans, Andres Löh, Johan Jeuring
Maintainer generics@haskell.org
Revised Revision 1 made by AndresLoeh at Tue Jun 21 13:43:07 UTC 2016
Category Generics
Home page http://www.cs.uu.nl/wiki/GenericProgramming/Multirec
Bug tracker https://github.com/kosmikus/multirec/issues
Source repo head: git clone https://github.com/kosmikus/multirec
Uploaded by JosePedroMagalhaes at Thu Jan 22 10:51:29 UTC 2015
Distributions NixOS:0.7.9
Downloads 7347 total (312 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2015-01-22 [all 1 reports]

Modules

[Index]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees