1 (* Copyright (C
) 2017 Matthew Fluet
.
2 * Copyright (C
) 2003-2006 Henry Cejtin
, Matthew Fluet
, Suresh
3 * Jagannathan
, and Stephen Weeks
.
5 * MLton is released under a BSD
-style license
.
6 * See the file MLton
-LICENSE for details
.
9 structure Pretty
: PRETTY
=
14 fun casee
{default
, rules
, test
} =
19 | SOME l
=> Vector.concat
[rules
, Vector.new1 (str
"_", l
)]
21 align
[seq
[str
"case ", test
, str
" of"],
22 indent (alignPrefix (Vector.toListMap
23 (rules
, fn (lhs
, rhs
) =>
24 mayAlign
[seq
[lhs
, str
" =>"], rhs
]),
29 fun conApp
{arg
, con
, targs
} =
32 then tuple (Vector.toList targs
)
36 | SOME x
=> seq
[str
" ", x
]]
38 fun handlee
{catch
, handler
, try
} =
40 seq
[str
"handle ", catch
, str
" => ", handler
]]
42 fun nest (prefix
, x
, y
) =
43 align
[seq
[str prefix
, x
],
48 fun lett (d
, e
) = nest ("let ", d
, e
)
50 fun locall (d
, d
') = nest ("local ", d
, d
')
52 fun primApp
{args
, prim
, targs
} =
55 andalso 0 < Vector.length targs
56 then list (Vector.toList targs
)
59 tuple (Vector.toList args
)]
61 fun raisee exn
= seq
[str
"raise ", exn
]
63 fun seq es
= mayAlign (separateLeft (Vector.toList es
, ";"))