LAM.Opt
mergeLet :: Term -> Term #
Merge let bindings right next to each other if they don't bind any common names.
inlineLambda :: Term -> Term #
If the argument contains subterms of the form let n = t in (λ n'. t') n where n does not appear in t', replace it with let n' = t[n'/n] in t'.
let n = t in (λ n'. t') n
n
t'
let n' = t[n'/n] in t'