on master help sign in
revising language and attempt at example
ab54cd5syzygyzer
reference/hoon-expressions/rune/lus.md+23−12
@@ -150,7 +150,7 @@ Regular: **variadic**.
150
150
151`a`, `c`, `e` are arm names and `b`, `d`, `f` are any Hoon expression. Note that unlike all other
151`a`, `c`, `e` are arm names and `b`, `d`, `f` are any Hoon expression. Note that unlike all other
152runes with a variable number of arguments, the list of arguments of `+*` does
152runes with a variable number of arguments, the list of arguments of `+*` does
153−not end with a terminating rune.
153+not end with a terminator.
154
154
155`+*` arms must always come at the beginning of the battery, before any other
155`+*` arms must always come at the beginning of the battery, before any other
156type of lus arm.
156type of lus arm.
@@ -158,13 +158,14 @@ type of lus arm.
158##### Discussion
158##### Discussion
159
159
160The primary use of `+*` is to assign aliases to doors (see Examples below).
160The primary use of `+*` is to assign aliases to doors (see Examples below).
161−However, they may also be used to define "virtual arms" which behave just like
161+However, they may also be used to define "virtual arms" which behave like
162−ordinary arms (?) except they allow nesting within cores that requires a specific
162+ordinary arms except that they allow nesting within cores that requires a specific
163−number of arms, such as Gall apps. Put another way, no matter how many virtual
163+number of arms, such as Gall app cores. Put another way, no matter how many virtual
164arms are defined in a `+*` statement, the interpreter will see it as only being
164arms are defined in a `+*` statement, the interpreter will see it as only being
165a single arm for the purposes of nesting.
165a single arm for the purposes of nesting.
166
166
167−Under the hood, `+*` gets compiled `=*`'s. `+* foo bar` rewrites each `++` arm to include
167+Under the hood, `+*` gets compiled as `=*`'s. `+* foo bar` rewrites each `++`
168+arm beneath it in the core to include
168`=* foo bar`. For example, the interpreter sees this Hoon expression
169`=* foo bar`. For example, the interpreter sees this Hoon expression
169
170
170```hoon
171```hoon
@@ -196,9 +197,10 @@ To assign an alias to a door, we often write the following.
196```
197```
197This is the idomatic way to assign the alias `this` to the door.
198This is the idomatic way to assign the alias `this` to the door.
198
199
199−Gall app cores have a fixed number of arms, but sometimes you'd like to have more.
200+Sometimes cores, such as Gall app cores, have a fixed number of arms, but you'd
200−This is where virtual arms come in. We note that it is often better style to
201+like to include more. This is where virtual arms may be of use. We note that it
201−compose cores with `=>` or `=<` to add more arms to a Gall app, though.
202+is often better style to compose cores with `=>` or `=<` to add more arms to a
203+Gall app, though. This usage of `+*` is controversial and should be minimized.
202
204
203```hoon
205```hoon
204|_ =bowl:gall
206|_ =bowl:gall
@@ -209,8 +211,17 @@ compose cores with `=>` or `=<` to add more arms to a Gall app, though.
209This assigns the door the alias `this`, the sample of the door `samp`, and the
211This assigns the door the alias `this`, the sample of the door `samp`, and the
210context of the door `cont`.
212context of the door `cont`.
211
213
214+You may also call functions with `+*` by making use of e.g. the `%~` rune.
212
215
213−
216+```hoon
214−You are not restricted to lark expressions. Functions may be defined as well...
217+=<
215−(insert example)
218+ |_ a=@
216−
219+ +* do ~(. +> a)
220+ ++ stuff foo:do
221+::etc
222+--
223+|_ b=@
224+++ foo %bar
225+::etc
226+--
227+```