unisonweb/unison

Add a Lisp-like syntax for Unison

Open

#1,842 opened on 2021年3月17日

GitHub で見る
 (1 comment) (12 reactions) (0 assignees)Haskell (304 forks)batch import
help wantedparser

Repository metrics

Stars
 (6,624 stars)
PR merge metrics
 (平均マージ 10d 2h) (30d で 5 merged PRs)

説明

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

コントリビューターガイド