The unbound package

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.