+++ title = "3g: Molds and Mold-Builders" weight = 27 template = "doc.html" +++ ### `++coin` Noun-literal syntax cases Syntax cases for nouns-literal: atoms, jammed nouns, and nestable tuples. Parsed and printed using `++so` and `++co` cores. #### Source ```hoon ++ coin $% [$$ p=dime] [$blob p=*] [$many p=(list coin)] == ``` --- #### Examples ``` > `coin`(need (slay '~s1')) [%$ p=[p=~.dr q=18.446.744.073.709.551.616]] > `coin`(need (slay '0x2b59')) [%$ p=[p=~.ux q=11.097]] > ~(rend co [%many ~[[%$ %ud 1] [%$ %tas 'a'] [%$ %s -2]]]) "._1_a_-2__" > ._1_a_-2__ [1 %a -2] > `@uv`(jam [3 4]) 0v2cd1 > (slay '~02cd1') [~ u=[%blob p=[3 4]]] > ~02cd1 [3 4] ``` --- ### `++dime` Aura-atom pair Used in `++coin`. Convenience methods [`++scot`](/docs/hoon/reference/stdlib/4m) and [`++scow`](/docs/hoon/reference/stdlib/4m) print dimes as `++cord` and `++tape`, respectively. [`++slat`](/docs/hoon/reference/stdlib/4m), [`++slav`](/docs/hoon/reference/stdlib/4m), and [`++slaw`](/docs/hoon/reference/stdlib/4m) are used to parse atoms of specific auras. #### Source ```hoon ++ dime [p=@ta q=@] ``` #### Examples ``` > +>:(slay '0x123') p=[p=~.ux q=291] ``` --- ### `++edge` Parsing location metadata. Parsing location input `p` and optional result `p.q` and parsing continuation `q.q`. #### Source ```hoon ++ edge [p=hair q=(unit [p=* q=nail])] :: parsing output ``` #### Examples ``` > *edge [p=[p=0 q=0] q=~] > (tall:vast [1 1] "a b") [p=[p=1 q=3] q=[~ u=[p=[%wing p=~[%a]] q=[p=[p=1 q=2] q=" b"]]]] ``` #### Discussion See also: [Section 3g](/docs/hoon/reference/stdlib/3g#rule), `++rule` --- ### `++hair` Parsing line and column A pair of two `@ud` used in parsing indicating line and column number. #### Source ```hoon ++ hair [p=@ud q=@ud] ``` #### Examples ``` > *hair [p=0 q=0] > `hair`[1 1] :: parsing starts at [1 1] as a convention. [p=1 q=1] > ((plus ace) [1 1] " --") [p=[p=1 q=4] q=[~ u=[p=[~~. " "] q=[p=[p=1 q=4] q="--"]]]] > `hair`p:((plus ace) [1 1] " --") [p=1 q=4] ``` --- ### `++like` Generic edge Generates an `++edge` with a parsed result set to a specific type. #### Source ```hoon ++ like |* a=gate |= b=_`*`[(hair) ~] :- p=(hair -.b) ^= q :- ~ u=[p=(a +>-.b) q=[p=(hair -.b) q=(tape +.b)]] ``` #### Examples ``` > *(like char) [p=[p=0 q=0] q=~] > (ace [1 1] " a") [p=[p=1 q=2] q=[~ u=[p=' ' q=[p=[p=1 q=2] q="a"]]]] > `(like char)`(ace [1 1] " a") [p=[p=1 q=2] q=[~ [p=~~. q=[p=[p=1 q=2] q="a"]]]] > `(like ,@)`(ace [1 1] " a") [p=[p=1 q=2] q=[~ u=[p=32 q=[p=[p=1 q=2] q="a"]]]] ``` --- ### `++nail` Location, remainder of parsed text Indicates parsing position `p`, and remaining text to be parsed `q`. #### Source ```hoon ++ nail [p=hair q=tape] ``` #### Examples ``` > +<:;~(plug cab cab) c=[p=[p=0 q=0] q=""] ``` --- ### `++path` Filesystem path A list of `++knot`s. `++knot` is another name for `@ta`. #### Source ```hoon ++ path (list knot) ``` #### Examples ``` > `path`"abc" /a/b/c ``` #### Discussion Used in `%clay` and `%eyre` extensively. --- ### `++pint` Parsing range A `++pint` is a pair of `++hair`, indicating from `p` to `q`. Mostly used for stack traces. #### Source ```hoon ++ pint [p=[p=@ q=@] q=[p=@ q=@]] ``` #### Examples ``` > !:(!!) :: !! always produces a crash /~zod/home/~2014.9.20..01.22.04..52e3/:<[1 4].[1 6]> > `pint`[[1 4] [1 6]] [p=[p=1 q=4] q=[p=1 q=6]] ``` --- ### `++rule` Parsing rule An empty parsing rule, but used to check that parsing rules match this with `_`. #### Source ```hoon ++ rule _|=(nail *edge) ``` #### Examples ``` > ([|=(a=nail [p.a ~ u=['a' a]])]:|6 [1 1] "hi") [[p=1 q=1] ~ u=['a' p=[p=1 q=1] q="hi"]] ``` --- ### `++spot` Stack trace line The stack trace that is printed after crashing. #### Source ```hoon ++ spot [p=path q=pint] ``` #### Examples ``` > !: !! :: !! always produces a crash /~zod/home/~2018.8.8..21.42.40..7852:<[1 5].[1 7]> ! exit ``` --- ### `++tone` Nock result, error report Produces either success (`%0`), a block with list of requests blocked on (`%1`), or failure with an error report (`%2`). #### Source ```hoon ++ tone $% [$0 p=*] :: success [$1 p=(list)] :: blocks [$2 p=(list [@ta *])] :: error report == ``` #### Examples ``` > (mink [[20 21] 0 3] $~) [%0 p=21] > (mink [[1 2] !=(!:(+(.)))] ,~) [ %2 p ~[ [ ~.spot [ [ \/72.245.008.048.359.254.300.063.028.130.093.488.830.539.186.242.06\/ 3.318.457.928.725.368.447.417.075.673.617.723.940.025.940.705.343 .057.601.925.133.611.559.292.046.932.324.629.048.702 \/ \/ 1.701.670.760 \/347.698.068.472.453.194.464.038.059.283.550.210.118.689.128.761.6\/ 88.459.326.078 \/ \/ 0 ] [1 20] 1 24 ] ] ] ``` --- ### `++toon` Nock result, stack trace Produces either success (`%0`), a block with list of requests blocked on (`%1`), or failure with a stack trace (`%2`). #### Source ```hoon ++ toon $% [$0 p=*] :: success [$1 p=(list)] :: blocks [$2 p=(list tank)] :: stack trace == ``` #### Examples ``` > (mock [[20 21] 0 3] $~) [%0 p=21] > (mock [[1 2] !=(!:(+(.)))] ,~) [%2 p=~[[%leaf p="/~zod/try/~2014.9.23..18.34.32..d3c5/:<[1 20].[1 24]>"]]] ``` --- ### `++wonk` Product from edge Pull result out of a `++edge`, or crash if there's no result. #### Source ```hoon ++ wonk |*(veq=edge ?~(q.veq !! p.u.q.veq)) ``` #### Examples ``` > (wide:vast [1 1] "(add 2 2)") [ p=[p=1 q=10] q [ ~ u [ p=[%cnhp p=[%wing p=~[%add]] q=~[[%sand p=%ud q=2] [%sand p=%ud q=2]]] q=[p=[p=1 q=10] q=""] ] ] ] > (wonk (wide:vast [1 1] "(add 2 2)")) [%cnhp p=[%wing p=~[%add]] q=~[[%sand p=%ud q=2] [%sand p=%ud q=2]]] ``` #### Discussion See also: `++edge` ---