TBase s => typ s
| TList t => dBox [punct "[", p_typ' false t, punct "]"]
| TArrow (t1, t2) =>
- parenIf pn [p_typ' true t1, space 1, punct "->", space 1, p_typ' true t2]
+ parenIf pn [p_typ' true t1, space 1, punct "->", space 1, p_typ' false t2]
| TAction (p, r1, r2) =>
- parenIf pn [p_predBoxed p, space 1, p_record r1, space 1,
- punct "=>", space 1, p_record r2]
+ (case (StringMap.numItems r1, StringMap.numItems r2) of
+ (0, 0) => parenIf pn [p_predBoxed p]
+ | (_, 0) => parenIf pn [p_predBoxed p, space 1, p_record r1]
+ | _ => parenIf pn [p_predBoxed p, space 1, p_record r1, space 1,
+ punct "=>", space 1, p_record r2])
| TNested (p, t) =>
parenIf pn [p_pred' false p, space 1, punct "=>", space 1, p_typ' false t]
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 ")"]