unbound (hackage): Specify the binding structure of your data type with an expressive set of type combinators, and Unbound handles the rest!  Automatically derives alpha-equivalence, free variable calculation, capture-avoiding substitution, and more. See Unbound.LocallyNameless to get started.
Keywords: bsd3|compilers-interpreters|generics|language|library