We eventually want to make the syntax for Unison pluggable. At the moment there's only one parser and pretty-printer, but in principle we can have as many syntaxes as we want. A good second syntax would be a Lisp-like one, since it should be particularly easy to implement.
The syntax of Clojure is particularly thoughtful and would be good to emulate since it's not just straight S-expressions.
E.g.
(ann mapReduce (Fn [loc -> (Fn [a -> b]) -> (Fn [b -> b -> b]) -> (List a) -> b]))
(defn mapReduce [loc fun ifEmpty reduce data]
(match [(split data)]
[Empty] ifEmpty
[(One a)] (fun a)
[(Two left right)]
(let
[fl (at loc '(mapReduce loc fun ifEmpty reduce !left))]
[fr (at loc '(mapReduce loc fun ifEmpty reduce !right))]
(reduce !fl !fr))
We eventually want to make the syntax for Unison pluggable. At the moment there's only one parser and pretty-printer, but in principle we can have as many syntaxes as we want. A good second syntax would be a Lisp-like one, since it should be particularly easy to implement.
The syntax of Clojure is particularly thoughtful and would be good to emulate since it's not just straight S-expressions.
E.g.