bound: Combinators for manipulating locally-nameless generalized de Bruijn terms
The goal of this package is to make it as easy as possible to deal with name binding without forcing an
awkward monadic style on the user. To that end we provide haskell 98 combinators for manipulating
locally-nameless generalized de Bruijn terms, build over user-supplied term types. A generalized
de Bruijn term is one where you can succ
whole trees instead of just individual variables.
The approach was first elaborated in Bird and Patterson, "de Bruijn notation as a nested data type":
http://www.cs.uwyo.edu/~jlc/courses/5000_fall_08/debruijn_as_nested_datatype.pdf
However, the combinators they used required higher rank types. Here we use a monad transformer to encapsulate the novel recursion pattern in their generalized de Bruijn representation. It is named Scope to match up with the terminology from Conor McBride and James McKinna's "I am not a number: I am a free variable", while providing stronger type safety guarantees.
http://www.cs.st-andrews.ac.uk/~james/RESEARCH/notanum.pdf
There are three worked examples in the examples folder:
Simple.hs provides an untyped lambda calculus with recursive let bindings.
Derived.hs shows how much of the API can be automated with DeriveTraversable and adds combinators for building binders with pattern matching.
Overkill.hs provides very strongly typed pattern matching many modern type extensions, including polymorphic kinds to ensure type safety. In general, the approach taken by Derived seems to deliver a better power to weight ratio.
Downloads
- bound-0.1.3.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.1, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.2, 0.2.1, 0.3.1, 0.3.2, 0.4, 0.5, 0.5.0.1, 0.5.0.2, 0.5.1, 0.6, 0.6.1, 0.7, 0.8, 0.8.1, 0.9, 0.9.0.1, 0.9.1, 0.9.1.1, 1.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6, 1.0.7, 2, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5, 2.0.6, 2.0.7 |
---|---|
Dependencies | base (>=4 && <5), bifunctors (>=0.1.3 && <0.2), prelude-extras (>=0.2 && <0.3), transformers (>=0.2 && <0.4) [details] |
License | BSD-3-Clause |
Copyright | Copyright (C) 2012 Edward A. Kmett |
Author | Edward A. Kmett |
Maintainer | Edward A. Kmett <ekmett@gmail.com> |
Category | Language, Compilers/Interpreters |
Home page | http://github.com/ekmett/bound/ |
Bug tracker | http://github.com/ekmett/bound/issues |
Source repo | head: git clone git://github.com/ekmett/bound.git |
Uploaded | by EdwardKmett at 2012-06-16T08:18:05Z |
Distributions | LTSHaskell:2.0.7, NixOS:2.0.7, Stackage:2.0.7 |
Reverse Dependencies | 9 direct, 0 indirect [details] |
Downloads | 38325 total (43 in the last 30 days) |
Rating | 2.5 (votes: 4) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |