From 92cc62de85e8b2ec1d93f7b06b963dd96786ab00 Mon Sep 17 00:00:00 2001 From: Sam Anklesaria Date: Fri, 31 Jul 2009 11:11:49 -0500 Subject: [PATCH] algebraic data types --- extra/classes/algebraic/algebraic-docs.factor | 5 +++++ extra/classes/algebraic/algebraic.factor | 10 ++++++++++ extra/classes/algebraic/authors.txt | 1 + extra/classes/algebraic/summary.txt | 1 + 4 files changed, 17 insertions(+) create mode 100644 extra/classes/algebraic/algebraic-docs.factor create mode 100644 extra/classes/algebraic/algebraic.factor create mode 100644 extra/classes/algebraic/authors.txt create mode 100644 extra/classes/algebraic/summary.txt diff --git a/extra/classes/algebraic/algebraic-docs.factor b/extra/classes/algebraic/algebraic-docs.factor new file mode 100644 index 0000000000..4d641a80e6 --- /dev/null +++ b/extra/classes/algebraic/algebraic-docs.factor @@ -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 index 0000000000..09ff137797 --- /dev/null +++ b/extra/classes/algebraic/algebraic.factor @@ -0,0 +1,10 @@ +USING: classes.parser classes.tuple classes.union kernel peg +peg-lexer sequences ; +IN: classes.algebraic + +ON-BNF: DATA: +tokenizer = +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 index 0000000000..ce0899f16e --- /dev/null +++ b/extra/classes/algebraic/authors.txt @@ -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 index 0000000000..082638e8d5 --- /dev/null +++ b/extra/classes/algebraic/summary.txt @@ -0,0 +1 @@ +Haskell-like algebraic data types \ No newline at end of file