@@ -80,7 +80,7 @@ it's still fun and useful to [learn more](../../nock).
80### <a name="hoon">`hoon`</a> (AST node)
80### <a name="hoon">`hoon`</a> (AST node)
82A [`hoon`](../reference) is the result of parsing a Hoon source
82A [`hoon`](../reference) is the result of parsing a Hoon source
83−expression into an AST node. Because every Hoon programs is,
83+expression into an AST node. Because every Hoon program is,
84in its entirety, a single expression of Hoon, the result of parsing
84in its entirety, a single expression of Hoon, the result of parsing
85a whole Hoon program into an AST is a single `hoon`.
85a whole Hoon program into an AST is a single `hoon`.
@@ -101,7 +101,9 @@ parsed too. So if `p` is 2 and `q` is 17, the parsed result is:
101[%clhp p=[%sand p=%ud q=2] q=[%sand p=%ud q=17]]
101[%clhp p=[%sand p=%ud q=2] q=[%sand p=%ud q=17]]
104+The 2 and 17 have each been parsed as `%sand`-tagged `hoon`s, which
104−To parse Hoon source into a hoon AST, use `ream` on a `cord`, e.g.:
105+represent constant atoms. To parse Hoon source into a hoon AST, use
106+`ream` on a `cord`, e.g.:
107(ream ':-(2 17)')
109(ream ':-(2 17)')
@@ -151,9 +153,14 @@ is the hoon.
152A `type` defines a set (finite or infinite) of nouns and ascribes
154A `type` defines a set (finite or infinite) of nouns and ascribes
153some semantics to it. There is no direct syntax for defining
155some semantics to it. There is no direct syntax for defining
154−types; they are always defined by inference (ie, by
156+types; they are always defined by inference (i.e., by
155[`mint`](#mint)), usually using a constructor (`mold`).
157[`mint`](#mint)), usually using a constructor (`mold`).
159+All types are assembled out of base types defined in `++type`.
160+(Look up `++ type` in hoon.hoon for examples.) When the compiler
161+does type-inference on a prorgam, it assembles complex types out
162+of the simpler built-in types.
157### `gate` (function)
164### `gate` (function)
159A `gate` is a Hoon function (lambda or closure). Other
166A `gate` is a Hoon function (lambda or closure). Other
@@ -211,9 +218,11 @@ To resolve limb `foo`, [`mint`](#mint) searches the subject depth-first,
211head-first for either a `face` named `foo`, or a `core` with the
218head-first for either a `face` named `foo`, or a `core` with the
212arm `foo`. If it finds a face, the product is a *leg*, or
219arm `foo`. If it finds a face, the product is a *leg*, or
213subtree of the subject. If it finds a core, it computes the arm
220subtree of the subject. If it finds a core, it computes the arm
214−formula with that core as the subject.
221+formula with that core as the subject. A limb can also be a slot
222+(direct tree address), like `+15`.
216−A limb can also be a slot (direct tree address), like `+15`.
224+The hoon compiler always resolves a limb to a tree axis lookup,
225+regardless of the kind of limb.
218`boo:[foo=12 baz=23 boo=34]` evaluates to `34`.
227`boo:[foo=12 baz=23 boo=34]` evaluates to `34`.
219`+6:[foo=12 baz=23 boo=34]` evaluates to `baz=23`.
228`+6:[foo=12 baz=23 boo=34]` evaluates to `baz=23`.