aboutsummaryrefslogtreecommitdiff
path: root/docs/spec/grammar.html
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-16 20:39:10 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-16 20:39:10 -0400
commit225a30537acfeb3efe2a7730e5d1a063cc537047 (patch)
tree5156e88b11ab1a3baccded91c77acbe8670f02ce /docs/spec/grammar.html
parent2a06176dd6920c26f02e63f8a3f266b59d10a7ed (diff)
Add return functions to the spec
Diffstat (limited to 'docs/spec/grammar.html')
-rw-r--r--docs/spec/grammar.html10
1 files changed, 6 insertions, 4 deletions
diff --git a/docs/spec/grammar.html b/docs/spec/grammar.html
index 46509c05..9babde63 100644
--- a/docs/spec/grammar.html
+++ b/docs/spec/grammar.html
@@ -32,10 +32,12 @@
</span> <span class='Function'>|</span> <span class='Function'>Operand</span> <span class='Modifier2'>_mod2_</span> <span class='Comment'># Left partial application
</span> <span class='Function'>|</span> <span class='Modifier'>_m</span> <span class='Function'>ASGN</span> <span class='Modifier'>_m1Expr</span>
</pre>
-<p>Functions can be formed by fully applying modifiers or as trains. modifiers are left-associative, so that the left operand (<code><span class='Function'>Operand</span></code>) can include modifier applications but the right operand (<code><span class='Value'>subject</span> <span class='Function'>|</span> <span class='Function'>Func</span></code>) cannot. Trains are right-associative, but bind less tightly than modifiers. Assignment is not allowed in the top level of a train: it must be parenthesized.</p>
+<p>Functions can be formed by fully applying modifiers, as trains, or with the return token <code><span class='Gets'>โ†’</span></code>, which behaves syntactically like a 1-modifier whose operand must be an identifier. Modifiers are left-associative, so that the left operand (<code><span class='Function'>Operand</span></code>) can include modifier applications but the right operand (<code><span class='Value'>subject</span> <span class='Function'>|</span> <span class='Function'>Func</span></code>) cannot. Trains are right-associative, but bind less tightly than modifiers. Assignment is not allowed in the top level of a train: it must be parenthesized.</p>
<pre><span class='Function'>Derv</span> <span class='Function'>=</span> <span class='Function'>Func</span>
<span class='Function'>|</span> <span class='Function'>Operand</span> <span class='Modifier'>_mod1</span>
<span class='Function'>|</span> <span class='Function'>Operand</span> <span class='Modifier2'>_mod2_</span> <span class='Paren'>(</span> <span class='Value'>subject</span> <span class='Function'>|</span> <span class='Function'>Func</span> <span class='Paren'>)</span>
+ <span class='Function'>|</span> <span class='Function'>Return</span>
+<span class='Function'>Return</span> <span class='Function'>=</span> <span class='Paren'>(</span> <span class='Function'>NAME</span> <span class='Function'>|</span> <span class='String'>&quot;๐•Š&quot;</span> <span class='Function'>|</span> <span class='String'>&quot;๐•ฃ&quot;</span> <span class='Paren'>)</span> <span class='String'>&quot;โ†’&quot;</span>
<span class='Function'>Operand</span> <span class='Function'>=</span> <span class='Value'>subject</span>
<span class='Function'>|</span> <span class='Function'>Derv</span>
<span class='Function'>Fork</span> <span class='Function'>=</span> <span class='Function'>Derv</span>
@@ -51,11 +53,11 @@
<span class='Function'>|</span> <span class='Paren'>(</span> <span class='Value'>subject</span> <span class='Function'>|</span> <span class='Value'>nothing</span> <span class='Paren'>)</span><span class='Value'>?</span> <span class='Function'>Derv</span> <span class='Value'>arg</span>
<span class='Value'>nothing</span> <span class='Function'>=</span> <span class='String'>&quot;ยท&quot;</span>
<span class='Function'>|</span> <span class='Paren'>(</span> <span class='Value'>subject</span> <span class='Function'>|</span> <span class='Value'>nothing</span> <span class='Paren'>)</span><span class='Value'>?</span> <span class='Function'>Derv</span> <span class='Value'>nothing</span>
-<span class='Function'>LHS_NAME</span> <span class='Function'>=</span> <span class='Value'>s</span> <span class='Function'>|</span> <span class='Function'>F</span> <span class='Function'>|</span> <span class='Modifier'>_m</span> <span class='Function'>|</span> <span class='Modifier2'>_c_</span>
-<span class='Function'>LHS_ANY</span> <span class='Function'>=</span> <span class='Function'>LHS_NAME</span> <span class='Function'>|</span> <span class='Value'>lhsList</span>
+<span class='Function'>NAME</span> <span class='Function'>=</span> <span class='Value'>s</span> <span class='Function'>|</span> <span class='Function'>F</span> <span class='Function'>|</span> <span class='Modifier'>_m</span> <span class='Function'>|</span> <span class='Modifier2'>_c_</span>
+<span class='Function'>LHS_ANY</span> <span class='Function'>=</span> <span class='Function'>NAME</span> <span class='Function'>|</span> <span class='Value'>lhsList</span>
<span class='Function'>LHS_ATOM</span> <span class='Function'>=</span> <span class='Function'>LHS_ANY</span> <span class='Function'>|</span> <span class='String'>&quot;(&quot;</span> <span class='Value'>lhsStr</span> <span class='String'>&quot;)&quot;</span>
<span class='Function'>LHS_ELT</span> <span class='Function'>=</span> <span class='Function'>LHS_ANY</span> <span class='Function'>|</span> <span class='Value'>lhsStr</span>
-<span class='Function'>LHS_ENTRY=</span> <span class='Function'>LHS_ELT</span> <span class='Function'>|</span> <span class='Value'>lhs</span> <span class='String'>&quot;โ‡&quot;</span> <span class='Function'>LHS_NAME</span>
+<span class='Function'>LHS_ENTRY=</span> <span class='Function'>LHS_ELT</span> <span class='Function'>|</span> <span class='Value'>lhs</span> <span class='String'>&quot;โ‡&quot;</span> <span class='Function'>NAME</span>
<span class='Value'>lhsStr</span> <span class='Function'>=</span> <span class='Function'>LHS_ATOM</span> <span class='Paren'>(</span> <span class='String'>&quot;โ€ฟ&quot;</span> <span class='Function'>LHS_ATOM</span> <span class='Paren'>)</span><span class='Function'>+</span>
<span class='Value'>lhsList</span> <span class='Function'>=</span> <span class='String'>&quot;โŸจ&quot;</span> <span class='Separator'>โ‹„</span><span class='Value'>?</span> <span class='Paren'>(</span> <span class='Paren'>(</span> <span class='Function'>LHS_ENTRY</span> <span class='Separator'>โ‹„</span> <span class='Paren'>)</span><span class='Value'>*</span> <span class='Function'>LHS_ENTRY</span> <span class='Separator'>โ‹„</span><span class='Value'>?</span> <span class='Paren'>)</span><span class='Value'>?</span> <span class='String'>&quot;โŸฉ&quot;</span>
<span class='Value'>lhs</span> <span class='Function'>=</span> <span class='Value'>s</span> <span class='Function'>|</span> <span class='Value'>lhsList</span> <span class='Function'>|</span> <span class='Value'>lhsStr</span>