1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-11 21:57:38 +03:00
mal/impls/jq/printer.jq

29 lines
1.3 KiB
Plaintext
Raw Permalink Normal View History

2020-01-05 16:36:06 +03:00
# {key: string, value: {kkind: kind, value: value}} -> [{kind: value.kkind, value: key}, value.value]
def _reconstruct_hash:
map([{
kind: .value.kkind,
value: .key
},
.value.value]);
def pr_str(env; opt):
2020-01-05 14:02:39 +03:00
(select(.kind == "symbol") | .value) //
(select(.kind == "string") | .value | if opt.readable then tojson else . end) //
2020-01-05 14:02:39 +03:00
(select(.kind == "keyword") | ":\(.value)") //
(select(.kind == "number") | .value | tostring) //
(select(.kind == "list") | .value | map(pr_str(env; opt)) | join(" ") | "(\(.))") //
(select(.kind == "vector") | .value | map(pr_str(env; opt)) | join(" ") | "[\(.)]") //
(select(.kind == "hashmap") | .value | to_entries | _reconstruct_hash | add // [] | map(pr_str(env; opt)) | join(" ") | "{\(.)}") //
2020-01-05 14:02:39 +03:00
(select(.kind == "nil") | "nil") //
(select(.kind == "true") | "true") //
(select(.kind == "false") | "false") //
(select(.kind == "fn") | "#<fn \(.function)>") //
2020-01-06 02:40:03 +03:00
(select(.kind == "function")| "#<function \([":anon"] + .names | join(", "))>") //
(select(.kind == "atom") | "(atom \(env.atoms[.identity] | pr_str(env; opt)))") //
"#<Unknown \(.kind) in \(.)>";
def pr_str(env):
pr_str(env; {readable: true});
def pr_str:
pr_str(null); # for stepX where X<6