]> gitweb.factorcode.org Git - factor.git/commitdiff
algebraic data types
authorSam Anklesaria <sam@Tintin.local>
Fri, 31 Jul 2009 16:11:49 +0000 (11:11 -0500)
committerSam Anklesaria <sam@Tintin.local>
Fri, 31 Jul 2009 16:11:49 +0000 (11:11 -0500)
extra/classes/algebraic/algebraic-docs.factor [new file with mode: 0644]
extra/classes/algebraic/algebraic.factor [new file with mode: 0644]
extra/classes/algebraic/authors.txt [new file with mode: 0644]
extra/classes/algebraic/summary.txt [new file with mode: 0644]

diff --git a/extra/classes/algebraic/algebraic-docs.factor b/extra/classes/algebraic/algebraic-docs.factor
new file mode 100644 (file)
index 0000000..4d641a8
--- /dev/null
@@ -0,0 +1,5 @@
+USING: help.markup help.syntax ;
+IN: classes.algebraic
+HELP: DATA:
+{ $syntax "DATA: class constructor | constructor arg ... | ... ;" }
+{ $description "Creates a haskell style algebraic data type.  For each constructor, a seperate tuple is created, and the resulting tuples are added to a union class." } ;
\ No newline at end of file
diff --git a/extra/classes/algebraic/algebraic.factor b/extra/classes/algebraic/algebraic.factor
new file mode 100644 (file)
index 0000000..09ff137
--- /dev/null
@@ -0,0 +1,10 @@
+USING: classes.parser classes.tuple classes.union kernel peg
+peg-lexer sequences ;
+IN: classes.algebraic
+
+ON-BNF: DATA:
+tokenizer = <foreign factor>
+delimit = "|" => [[ drop ignore ]]
+tuple = (!("|"|";").)+ => [[ unclip create-class-in [ tuple rot define-tuple-class ] keep ]]
+expr = . tuple (delimit tuple)* ";" => [[ first3 swap prefix [ create-class-in ] dip define-union-class ignore ]]
+;ON-BNF
\ No newline at end of file
diff --git a/extra/classes/algebraic/authors.txt b/extra/classes/algebraic/authors.txt
new file mode 100644 (file)
index 0000000..ce0899f
--- /dev/null
@@ -0,0 +1 @@
+Sam Anklesaria
\ No newline at end of file
diff --git a/extra/classes/algebraic/summary.txt b/extra/classes/algebraic/summary.txt
new file mode 100644 (file)
index 0000000..082638e
--- /dev/null
@@ -0,0 +1 @@
+Haskell-like algebraic data types
\ No newline at end of file