| ESkip => keyword "_"
| ESet (x, e) => parenIf pn [exp x, space 1, punct "=", space 1, p_exp e]
- | EGet (x1, x2, e) => parenIf pn [dBox [exp x1, space 1, punct "<-",
- space 1, exp x2, punct ";", space 1],
- p_exp e]
+ | EGet (x1, NONE, x2, e) => parenIf pn [dBox [exp x1, space 1, punct "<-",
+ space 1, exp x2, punct ";", space 1],
+ p_exp e]
+ | EGet (x1, SOME t, x2, e) => parenIf pn [dBox [exp x1, space 1, punct ":", space 1, p_typ t,
+ space 1, punct "<-",
+ space 1, exp x2, punct ";", space 1],
+ p_exp e]
| ESeq es => parenIf pn (valOf (foldr (fn (e, NONE) => SOME [p_exp e]
| (e, SOME ds) => SOME (dBox [p_exp e, punct ";", newline] :: ds))
NONE es))
keyword "end"]
| EWith (e1, (ESkip, _)) => dBox [p_exp e1, space 1, keyword "with", space 1, keyword "end"]
| EWith (e1, e2) => dBox [p_exp e1, space 1, keyword "with", p_exp e2, space 1, keyword "end"]
+ | EIf (e1, e2, e3) => dBox [keyword "if", space 1, p_exp e1,
+ space 1, keyword "then", space 1, p_exp e2,
+ space 1, keyword "else", space 1, p_exp e3]
and p_exp e = p_exp' false e
fun p_decl d =
ident name, space 1,
punct ":", space 1,
p_typ t])
+ | DEnv (name, NONE, _) => string "Unannotated env declaration!"
+ | DEnv (name, SOME t, _) => anchor ("D_" ^ name,
+ dBox [keyword "var", space 1,
+ ident name, space 1,
+ punct ":", space 1,
+ p_typ t])
| DContext name => anchor ("C_" ^ name,
dBox [keyword "context", space 1,
ident name])
space 1,
punct ":", space 1,
p_typ t]
+ | DEnv (name, NONE, _) => string "Unannotated var declaration!"
+ | DEnv (name, SOME t, _) => dBox [keyword "var", space 1,
+ link ("#D_" ^ name, ident name),
+ space 1,
+ punct ":", space 1,
+ p_typ t]
| DContext name => dBox [keyword "context", space 1,
link ("#C_" ^ name, ident name)]