Sfoglia il codice sorgente

Beginnings of readme

Getty Ritter 9 anni fa
parent
commit
8e9f0631d1
1 ha cambiato i file con 40 aggiunte e 0 eliminazioni
  1. 40 0
      README.md

+ 40 - 0
README.md

@@ -0,0 +1,40 @@
+S-Cargot is a library for parsing and emitting S-expressions, designed
+to be flexible, customizable, and extensible. Different uses of
+S-expressions often understand subtly different variations on what an
+S-expression is. The goal of S-Cargot is to create as many reusable
+components that can be repurposed to nearly any S-expression variant.
+
+Additionally, S-Cargot uses these to include out-of-the-box parsing and
+processing for several existing variations on S-expressions, including
+Common Lisp (**in progresss**), Scheme (**in progress**), the
+[Rivest internet-draft](http://people.csail.mit.edu/rivest/Sexp.txt)
+(**in progress**), and Clojure (**in progress**).
+
+The central way of interacting with the S-Cargot library is by creating
+and modifying a _spec_, which is a value that represents a given
+family of S-expressions. A _spec_, which is of type `SExprSpec`,
+contains the information necessary to implement reader macros, arbitrary
+kinds of comments, and various processing steps. A `SExprSpec` has two
+type parameters:
+
+~~~~
+                      +------ the type that represents a SExpr atom
+                      |
+                      |    +- the Haskell representation of the SExpr value
+                      |    |
+someSpec :: SExprSpec atom carrier
+~~~~
+
+There are three built-in representations of S-expression lists: two of them
+are isomorphic, as one or the other might be better for processing
+S-expression data, and the third represents only a subset of possible
+S-expressions.
+
+~~~~
+-- cons-based representation
+data SExpr atom = SAtom atom | SCons (SExpr atom) (SExpr atom) | SNil
+
+-- list-based representation
+data RichSExpr atom
+  = RSList [RichSExpr atom]
+~~~~