@@ -150,7 +150,7 @@ Regular: **variadic**.
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.
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
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.
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
@@ -196,9 +197,10 @@ To assign an alias to a door, we often write the following.
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.
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.
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`.
214+You may also call functions with `+*` by making use of e.g. the `%~` rune.
214−You are not restricted to lark expressions. Functions may be defined as well...
217+=<
215−(insert example)
218+ |_ a=@