unisonweb/unison

Add a Lisp-like syntax for Unison

Open

#1,842 建立於 2021年3月17日

在 GitHub 查看
 (1 留言) (12 反應) (0 負責人)Haskell (6,624 star) (304 fork)batch import
help wantedparser

描述

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))

貢獻者指南