5 | T.List
{ T.meta = meta } -> meta
6 | T.Map
{ T.meta = meta } -> meta
7 | T.Vector
{ T.meta = meta } -> meta
8 | T.Symbol
{ T.meta = meta } -> meta
9 | T.Fn
{ T.meta = meta } -> meta
12 let rec pr_str mal_obj print_readably
=
13 let r = print_readably
in
15 | T.Int i
-> string_of_int i
16 | T.Symbol
{ T.value = s
} -> s
17 | T.Keyword s
-> ":" ^ s
19 | T.Bool
true -> "true"
20 | T.Bool
false -> "false"
23 then "\"" ^
(Reader.gsub
(Str.regexp
"\\([\"\\\n]\\)")
29 | T.List
{ T.value = xs
} ->
30 "(" ^
(String.concat
" " (List.map
(fun s
-> pr_str s
r) xs
)) ^
")"
31 | T.Vector
{ T.value = xs
} ->
32 "[" ^
(String.concat
" " (List.map
(fun s
-> pr_str s
r) xs
)) ^
"]"
33 | T.Map
{ T.value = xs
} ->
34 "{" ^
(Types.MalMap.fold
(fun k v s
-> s ^
(if s
= "" then "" else " ") ^
(pr_str k
r)
35 ^
" " ^
(pr_str v
r)) xs
"")
38 | T.Atom x
-> "(atom " ^
(pr_str !x
r) ^
")"