punct ":", space 1,
dBox [punct "(", p_typ t, punct ")"],
space 1, punct "->", space 1, p_exp e, punct ")"]
+ | EALam (x, p, e) => dBox [punct "(\\", space 1, exp x, space 1,
+ punct ":", space 1, p_pred p,
+ space 1, punct "->", space 1, p_exp e, punct ")"]
| EVar x => exp x
| EApp (e1, e2) => dBox [punct "(", p_exp e1, break {nsp = 1, offset = 0}, p_exp e2, punct ")"]