Beginnings of readme
Getty Ritter
10 years ago
| 1 | S-Cargot is a library for parsing and emitting S-expressions, designed | |
| 2 | to be flexible, customizable, and extensible. Different uses of | |
| 3 | S-expressions often understand subtly different variations on what an | |
| 4 | S-expression is. The goal of S-Cargot is to create as many reusable | |
| 5 | components that can be repurposed to nearly any S-expression variant. | |
| 6 | ||
| 7 | Additionally, S-Cargot uses these to include out-of-the-box parsing and | |
| 8 | processing for several existing variations on S-expressions, including | |
| 9 | Common Lisp (**in progresss**), Scheme (**in progress**), the | |
| 10 | [Rivest internet-draft](http://people.csail.mit.edu/rivest/Sexp.txt) | |
| 11 | (**in progress**), and Clojure (**in progress**). | |
| 12 | ||
| 13 | The central way of interacting with the S-Cargot library is by creating | |
| 14 | and modifying a _spec_, which is a value that represents a given | |
| 15 | family of S-expressions. A _spec_, which is of type `SExprSpec`, | |
| 16 | contains the information necessary to implement reader macros, arbitrary | |
| 17 | kinds of comments, and various processing steps. A `SExprSpec` has two | |
| 18 | type parameters: | |
| 19 | ||
| 20 | ~~~~ | |
| 21 | +------ the type that represents a SExpr atom | |
| 22 | | | |
| 23 | | +- the Haskell representation of the SExpr value | |
| 24 | | | | |
| 25 | someSpec :: SExprSpec atom carrier | |
| 26 | ~~~~ | |
| 27 | ||
| 28 | There are three built-in representations of S-expression lists: two of them | |
| 29 | are isomorphic, as one or the other might be better for processing | |
| 30 | S-expression data, and the third represents only a subset of possible | |
| 31 | S-expressions. | |
| 32 | ||
| 33 | ~~~~ | |
| 34 | -- cons-based representation | |
| 35 | data SExpr atom = SAtom atom | SCons (SExpr atom) (SExpr atom) | SNil | |
| 36 | ||
| 37 | -- list-based representation | |
| 38 | data RichSExpr atom | |
| 39 | = RSList [RichSExpr atom] | |
| 40 | ~~~~ |