unisonweb/unison

Add a Lisp-like syntax for Unison

Open

#1 842 ouverte le 17 mars 2021

Voir sur GitHub
 (1 commentaire) (12 réactions) (0 assignés)Haskell (304 forks)batch import
help wantedparser

Métriques du dépôt

Stars
 (6 624 stars)
Métriques de merge PR
 (Merge moyen 10j 2h) (5 PRs mergées en 30 j)

Description

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

Guide contributeur