@@ -0,0 +1,47 @@
10+Produce a type constructor arm.
17++* p=term [q=term] r=spec
20+`p` is the arm name, `q` is the name of the argument for the constructor function enclosed in square brackets, and `r` is a structure expression that defines the constructor function.
24+Arms produced by `+*` are essentially type constructors. They are used to construct new types from ones you already have. Consider `list`, which takes some type -- e.g., `@`, `tape`, etc. -- and returns a new type, e.g., `(list @)`, `(list tape)`, etc.
26+The Hoon subexpression, `r`, must be a structure expression. That is, it must be either a basic structure expression (`*`, `~`, `^`, `?`, and `@`), or a complex expression made with the `$` family of runes (including irregular variants).
32+ +* triple [a] [a a a]
33+ +* wrap-flag [a] [? a]
36+> `(triple.c @)`[12 14 16]
39+> `(triple.c ?)`[12 14 16]
42+> `(triple.c ?)`[& | |]
45+> `(wrap-flag.c @)`[& 22]