Type Safe Higher-order abstract syntax

Type Safe Higher-order abstract syntax via GADT encoding