unisonweb / unison

A friendly programming language from the future
https://unison-lang.org
Other
5.78k stars 270 forks source link

Add a Lisp-like syntax for Unison #1842

Open runarorama opened 3 years ago

runarorama commented 3 years ago

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))
seagreen commented 3 years ago

Prerequisite: https://github.com/unisonweb/unison/issues/499