on master help sign in
update stdlib 4c to 4f
b89ac89Tinnus Napbus
content/docs/hoon/reference/stdlib/4c.md+296−260
@@ -4,357 +4,393 @@ weight = 30
4template = "doc.html"
4template = "doc.html"
5+++
5+++
6
6
7−## `++re`
7+## `++wash`
8
8
9−Pretty-printing engine
9+Render tank at width
10
10
11−Pretty-printing engine that accepts a `++tank` sample and contains arms that perform computation on it.
11+Render `tac` with indent `tab` and maximum width `edg`. If `tac` cannot be
12+rendered in-line in less than `tac` characters, it will be split into multiple
13+lines if possible. If `tac` cannot be made to fit, `wash` will crash.
12
14
13#### Accepts
15#### Accepts
14
16
17+`[tab=@ edg=@]` - `tab` is the number of characters of indentation and `edge` is
18+the maximum number of characters of width.
19+
15−`tac` is a `++tank`.
20+`tac` is a `tank`.
16
21
17#### Produces
22#### Produces
18
23
24+A `wall` (list of `tape`s).
25+
26+#### Source
27+
19```hoon
28```hoon
20− ++ re
29+++ wash
21− |_ tac/tank
30+ |= [[tab=@ edg=@] tac=tank] ^- wall
31+ (~(win re tac) tab edg)
22```
32```
23
33
24#### Examples
34#### Examples
25
35
26```
36```
27− > ~(. re leaf+"ham")
37+> =rose `tank`[%rose [" " "[" "]"] ~['abc' 'def' 'ghi']]
28− <2.gdc {tac/{$leaf ""} <402.arm 110.jyx 1.ztu $151>}>
29−```
30
38
31−---
39+> ((slog (crip (of-wall:format (wash [0 80] rose))) ~) ~)
40+[abc def ghi]
32
41
33−### `++ram:re`
34
42
35−Flatten to tape
43+> ((slog (crip (of-wall:format (wash [0 8] rose))) ~) ~)
44+[ abc
45+ def
46+ ghi
47+]
36
48
37−Flatten `++tank` out into a `++tape`.
49+> ((slog (crip (of-wall:format (wash [3 15] rose))) ~) ~)
50+ [ abc
51+ def
52+ ghi
53+ ]
54+```
38
55
39−#### Accepts
56+## `++re`
40
57
41−`tac` is a `++tank`, taken from sample of `++re` core.
58+Pretty-printing engine
42
59
43−#### Produces
60+Container core for a pretty-printing engine that accepts a `tank` sample and contains arms that perform computation on it.
61+
62+#### Accepts
44
63
45−A `++tape`.
64+`tac` is a `tank`.
46
65
47#### Source
66#### Source
48
67
49```hoon
68```hoon
50− ++ ram
69+++ re
51− ^- tape
52− ?- -.tac
53− $leaf p.tac
54− $palm ram(tac [%rose [p.p.tac (weld q.p.tac r.p.tac) s.p.tac] q.tac])
55− $rose
56− %+ weld
57− q.p.tac
70+ |_ tac=tank
58− |- ^- tape
59− ?~ q.tac
60− r.p.tac
61− =+ voz=$(q.tac t.q.tac)
62− (weld ram(tac i.q.tac) ?~(t.q.tac voz (weld p.p.tac voz)))
63− ==
64− ::
65−```
66−
67−#### Examples
68−
69−```
70− > ~(ram re leaf+"foo")
71− "foo"
72− > ~(ram re rose+["." "(" ")"]^~[leaf+"bar" leaf+"baz" leaf+"bam"])
73− "(bar.baz.bam)"
74```
71```
75
72
76---
73---
77
74
78−### `++win:re`
75+### `++ram:re`
79
76
80−Render at indent
77+Flatten to tape
81
78
82−Render at indent level `tab` and width `edg`.
79+Flatten `tank` out into a `tape`.
83
80
84#### Accepts
81#### Accepts
85
82
86−`tac` is a `++tank`, taken from sample of `++re` core.
83+`tac` is a `tank`, taken from sample of `++re` core.
87−
88−`tab` and `edg` are atoms.
89
84
90#### Produces
85#### Produces
91
86
92−A `++wall` (`++list` of `++tapes`).
87+A `tape`.
93
88
94#### Source
89#### Source
95
90
96```hoon
91```hoon
97− ++ win
92+++ ram
98− |= {tab/@ edg/@}
93+ ^- tape
99− =+ lug=`wall`~
94+ ?@ tac
100− |^ |- ^- wall
95+ (trip tac)
101− ?- -.tac
96+ ?- -.tac
102− $leaf (rig p.tac)
97+ %leaf p.tac
103− $palm
98+ ::
104− ?: fit
99+ :: flat %palm rendered as %rose with welded openers
105− (rig ram)
100+ ::
101+ %palm
106− ?~ q.tac
102+ =* mid p.p.tac
107− (rig q.p.tac)
103+ =* for (weld q.p.tac r.p.tac)
108− ?~ t.q.tac
104+ =* end s.p.tac
109− (rig(tab (add 2 tab), lug $(tac i.q.tac)) q.p.tac)
105+ ram(tac [%rose [mid for end] q.tac])
110− => .(q.tac `(list tank)`q.tac)
106+ ::
111− =+ lyn=(mul 2 (lent q.tac))
107+ :: flat %rose rendered with open/mid/close
112− =+ ^= qyr
108+ ::
113− |- ^- wall
109+ %rose
114− ?~ q.tac
110+ =* mid p.p.tac
115− lug
111+ =* for q.p.tac
116− %= ^$
112+ =* end r.p.tac
113+ =* lit q.tac
114+ %+ weld
115+ for
116+ |- ^- tape
117+ ?~ lit
118+ end
119+ %+ weld
117− tac i.q.tac
120+ ram(tac i.lit)
118− tab (add tab (sub lyn 2))
121+ =* voz $(lit t.lit)
119− lug $(q.tac t.q.tac, lyn (sub lyn 2))
122+ ?~(t.lit voz (weld mid voz))
120− ==
123+ ==
121− (wig(lug qyr) q.p.tac)
122− ::
123```
124```
124
125
125#### Examples
126#### Examples
126
127
127```
128```
128− > (~(win re leaf+"samoltekon-lapdok") 0 20)
129+> ~(ram re leaf+"foo")
129− <<"samoltekon-lapdok">>
130+"foo"
130−
131− > (~(win re leaf+"samoltekon-lapdok") 0 10)
132− <<"\/samolt\/" " ekon-l" " apdok" "\/ \/">>
133−
134− > (~(win re rose+["--" "[" "]"]^~[leaf+"1423" leaf+"2316"]) 0 20)
135− <<"[1423--2316]">>
136
131
137− > (~(win re rose+["--" "[" "]"]^~[leaf+"1423" leaf+"2316"]) 0 10)
132+> ~(ram re [%rose [" " "[" "]"] ~['abc' 'def' 'ghi']])
138− <<"[ 1423" " 2316" "]">>
133+"[abc def ghi]"
139```
134```
140
135
141---
136---
142
137
143−### `++din:re`
144−
145−XX document
146−
147−#### Accepts
148−
149−#### Produces
150−
151−#### Source
152−
153− ++ din (mod (add 2 tab) (mul 2 (div edg 3)))
154−
155−---
156−
157−### `++fit:re`
158−
159−Fit on one line test
160−
161−Determine whether `tac` fits on one line. Internal to `++win`
162−
163−#### Accepts
164−
165−#### Produces
166−
167−#### Source
168−
169−++ fit (lte (lent ram) (sub edg tab))
170−
171−#### Examples
172−
173−---
174−
175−### `++rig:re`
138+### `++win:re`
176
139
177−Wrap in `\/`
140+Render at indent
178
141
179−Wrap `++tape` in `\/` if it doesn't fit at current indentation. Internal to
142+Render at indent level `tab` and width `edg`.
180−`++win`
181
143
182#### Accepts
144#### Accepts
183
145
184−`tac` is a `++tank`, taken from sample of `++re` core.
146+`tac` is a `tank`, taken from sample of `++re` core.
185
147
186−`hom` is a `++tape`.
148+`tab` and `edg` are atoms.
187
149
188#### Produces
150#### Produces
189
151
190−A `++wall` (list of `++tape`s).
152+A `wall` (list of `tape`).
191
153
192#### Source
154#### Source
193
155
194```hoon
156```hoon
195− ++ rig
157+++ win
196− |= hom/tape
158+ |= [tab=@ud edg=@ud]
159+ :: output stack
160+ ::
161+ =| lug=wall
197− ^- wall
162+ |^ ^- wall
163+ ?@ tac
164+ (rig (trip tac))
165+ ?- -.tac
166+ %leaf (rig p.tac)
167+ ::
168+ %palm
169+ =/ hom ram
198− ?: & ::(lte (lent hom) (sub edg tab))
170+ ?: (lte (lent hom) (sub edg tab))
199− [(runt [tab ' '] hom) lug]
171+ (rig hom)
172+ ::
173+ =* for q.p.tac
174+ =* lit q.tac
175+ ?~ lit
176+ (rig for)
177+ ?~ t.lit
200− => .(tab (add tab 2), edg (sub edg 2))
178+ =: tab (add 2 tab)
201− =+ mut=(trim (sub edg tab) hom)
179+ lug $(tac i.lit)
202− :- (runt [(sub tab 2) ' '] ['\\' '/' (weld p.mut `_hom`['\\' '/' ~])])
180+ ==
203− => .(hom q.mut)
181+ (rig for)
182+ ::
183+ => .(lit `(list tank)`lit)
184+ =/ lyn (mul 2 (lent lit))
185+ =. lug
204− |-
186+ |- ^- wall
205− ?~ hom
187+ ?~ lit
206− :- %+ runt
207− [(sub tab 2) ' ']
208− ['\\' '/' (runt [(sub edg tab) ' '] ['\\' '/' ~])]
209 lug
188 lug
189+ =/ nyl (sub lyn 2)
190+ %= ^$
191+ tac i.lit
192+ tab (add tab nyl)
193+ lug $(lit t.lit, lyn nyl)
194+ ==
195+ (wig for)
196+ ::
197+ %rose
198+ =/ hom ram
210− => .(mut (trim (sub edg tab) hom))
199+ ?: (lte (lent hom) (sub edg tab))
211− [(runt [tab ' '] p.mut) $(hom q.mut)]
200+ (rig hom)
212 ::
201 ::
202+ =* for q.p.tac
203+ =* end r.p.tac
204+ =* lit q.tac
205+ =. lug
206+ |- ^- wall
207+ ?~ lit
208+ ?~(end lug (rig end))
209+ %= ^$
210+ tac i.lit
211+ tab (mod (add 2 tab) (mul 2 (div edg 3)))
212+ lug $(lit t.lit)
213+ ==
214+ ?~(for lug (wig for))
215+ ==
216+ :: +rig: indent tape and cons with output stack
217+ ::
218+ ++ rig
219+ |= hom=tape
220+ ^- wall
221+ [(runt [tab ' '] hom) lug]
222+ :: +wig: indent tape and cons with output stack
223+ ::
224+ :: joined with the top line if whitespace/indentation allow
225+ ::
226+ ++ wig
227+ |= hom=tape
228+ ^- wall
229+ ?~ lug
230+ (rig hom)
231+ =/ wug :(add 1 tab (lent hom))
232+ ?. =+ mir=i.lug
233+ |- ^- ?
234+ ?~ mir |
235+ ?| =(0 wug)
236+ ?&(=(' ' i.mir) $(mir t.mir, wug (dec wug)))
237+ ==
238+ (rig hom) :: ^ XX regular form?
239+ :_ t.lug
240+ %+ runt [tab ' ']
241+ (weld hom `tape`[' ' (slag wug i.lug)])
242+ --
213```
243```
214
244
215#### Examples
245#### Examples
216
246
217−---
247+```
218−
248+> =rose `tank`[%rose [" " "[" "]"] ~['abc' 'def' 'ghi']]
219−### `++wig:re`
220−
221−`++win` render tape
222−
223−Render `++tape`. Internal to `++win`.
224−
225−#### Accepts
226
249
227−`tac` is a `++tank`, taken from sample of `++re` core.
250+> ((slog (crip (of-wall:format (~(win re rose) 0 80))) ~) ~)
251+[abc def ghi]
228
252
229−`hom` is a `++tape`.
253+> ((slog (crip (of-wall:format (~(win re rose) 3 80))) ~) ~)
254+ [abc def ghi]
230
255
231−#### Produces
256+> ((slog (crip (of-wall:format (~(win re rose) 0 10))) ~) ~)
257+[ abc
258+ def
259+ ghi
260+]
232
261
233−```hoon
262+> ((slog (crip (of-wall:format (~(win re rose) 3 15))) ~) ~)
234− ++ wig
263+ [ abc
235− |= hom/tape
264+ def
236− ^- wall
265+ ghi
237− ?~ lug
266+ ]
238− (rig hom)
239− =+ lin=(lent hom)
240− =+ wug=:(add 1 tab lin)
241− ?. =+ mir=i.lug
242− |- ?~ mir
243− |
244− ?|(=(0 wug) ?&(=(' ' i.mir) $(mir t.mir, wug (dec wug))))
245− (rig hom) :: ^ XX regular form?
246− [(runt [tab ' '] (weld hom `tape`[' ' (slag wug i.lug)])) t.lug]
247− --
248− --
249```
267```
250
268
251---
269---
252
270
253## `++show`
271## `++show`
254
272
255−```hoon
256− ++ show :: XX deprecated, use span
273+Pretty-printer (deprecated)
257− |= vem/*
258− |^ ^- tank
259− ?: ?=(@ vem)
260− [%leaf (mesc (trip vem))]
261− ?- vem
262− {s/$~ c/*}
263− [%leaf '\'' (weld (mesc (tape +.vem)) `tape`['\'' ~])]
264− ::
265− {s/$a c/@} [%leaf (mesc (trip c.vem))]
266− {s/$b c/*} (shop c.vem |=(a/@ ~(rub at a)))
267− {s/{$c p/@} c/*}
268− :+ %palm
269− [['.' ~] ['-' ~] ~ ~]
270− [[%leaf (mesc (trip p.s.vem))] $(vem c.vem) ~]
271− ::
272− {s/$d c/*} (shop c.vem |=(a/@ ~(rud at a)))
273− {s/$k c/*} (tank c.vem)
274− {s/$h c/*}
275− :+ %rose
276− [['/' ~] ['/' ~] ~]
277− =+ yol=((list @ta) c.vem)
278− (turn yol |=(a/@ta [%leaf (trip a)]))
279− ::
280− {s/$l c/*} (shol c.vem)
281− {s/$o c/*}
282− %= $
283− vem
284− :- [%m '%h:<[%d %d].[%d %d]>']
285− [-.c.vem +<-.c.vem +<+.c.vem +>-.c.vem +>+.c.vem ~]
286− ==
287− ::
288− {s/$p c/*} (shop c.vem |=(a/@ ~(rup at a)))
289− {s/$q c/*} (shop c.vem |=(a/@ ~(r at a)))
290− {s/$r c/*} $(vem [[%r ' ' '{' '}'] c.vem])
291− {s/$t c/*} (shop c.vem |=(a/@ ~(rt at a)))
292− {s/$v c/*} (shop c.vem |=(a/@ ~(ruv at a)))
293− {s/$x c/*} (shop c.vem |=(a/@ ~(rux at a)))
294− {s/{$m p/@} c/*} (shep p.s.vem c.vem)
295− {s/{$r p/@} c/*}
296− $(vem [[%r ' ' (cut 3 [0 1] p.s.vem) (cut 3 [1 1] p.s.vem)] c.vem])
297− ::
298− {s/{$r p/@ q/@ r/@} c/*}
299− :+ %rose
300− :* p=(mesc (trip p.s.vem))
301− q=(mesc (trip q.s.vem))
302− r=(mesc (trip r.s.vem))
303− ==
304− |- ^- (list tank)
305− ?@ c.vem
306− ~
307− [^$(vem -.c.vem) $(c.vem +.c.vem)]
308− ::
309− {s/$z c/*} $(vem [[%r %$ %$ %$] c.vem])
310− * !!
311− ==
312−```
313
274
314−XX document
275+Pretty prints noun `vem`, producing a `tank`. This function is deprecated and in
276+most cases produces outdated syntax or incorrect results.
315
277
316−## `++shep`
278+#### Accepts
317
279
318−```hoon
280+`vem` is a noun.
319− ++ shep
320− |= {fom/@ gar/*}
321− ^- tank
322− =+ l=(met 3 fom)
323− =+ i=0
324− :- %leaf
325− |- ^- tape
326− ?: (gte i l)
327− ~
328− =+ c=(cut 3 [i 1] fom)
329− ?. =(37 c)
330− (weld (mesc [c ~]) $(i +(i)))
331− =+ d=(cut 3 [+(i) 1] fom)
332− ?. .?(gar)
333− ['\\' '#' $(i (add 2 i))]
334− (weld ~(ram re (show d -.gar)) $(i (add 2 i), gar +.gar))
335− ::
336−```
337
281
338−XX document
282+#### Produces
339
283
340−## `++shop`
284+A `tank`.
285+
286+#### Source
341
287
342```hoon
288```hoon
343− ++ shop
289+++ show
344− |= {aug/* vel/$-(a/@ tape)}
290+ |= vem=*
345− ^- tank
291+ |^ ^- tank
346− ?: ?=(@ aug)
292+ ?: ?=(@ vem)
347− [%leaf (vel aug)]
293+ [%leaf (mesc (trip vem))]
294+ ?- vem
295+ [s=~ c=*]
296+ [%leaf '\'' (weld (mesc (tape +.vem)) `tape`['\'' ~])]
297+ ::
298+ [s=%a c=@] [%leaf (mesc (trip c.vem))]
299+ [s=%b c=*] (shop c.vem |=(a=@ ~(rub at a)))
300+ [s=[%c p=@] c=*]
301+ :+ %palm
302+ [['.' ~] ['-' ~] ~ ~]
303+ [[%leaf (mesc (trip p.s.vem))] $(vem c.vem) ~]
304+ ::
305+ [s=%d c=*] (shop c.vem |=(a=@ ~(rud at a)))
306+ [s=%k c=*] (tank c.vem)
307+ [s=%h c=*]
308+ :+ %rose
309+ [['/' ~] ['/' ~] ~]
310+ =+ yol=((list @ta) c.vem)
311+ (turn yol |=(a=@ta [%leaf (trip a)]))
312+ ::
313+ [s=%l c=*] (shol c.vem)
314+ [s=%o c=*]
315+ %= $
316+ vem
317+ :- [%m '%h::[%d %d].[%d %d]>']
318+ [-.c.vem +<-.c.vem +<+.c.vem +>-.c.vem +>+.c.vem ~]
319+ ==
320+ ::
321+ [s=%p c=*] (shop c.vem |=(a=@ ~(rup at a)))
322+ [s=%q c=*] (shop c.vem |=(a=@ ~(r at a)))
323+ [s=%r c=*] $(vem [[%r ' ' '{' '}'] c.vem])
324+ [s=%t c=*] (shop c.vem |=(a=@ ~(rt at a)))
325+ [s=%v c=*] (shop c.vem |=(a=@ ~(ruv at a)))
326+ [s=%x c=*] (shop c.vem |=(a=@ ~(rux at a)))
327+ [s=[%m p=@] c=*] (shep p.s.vem c.vem)
328+ [s=[%r p=@] c=*]
329+ $(vem [[%r ' ' (cut 3 [0 1] p.s.vem) (cut 3 [1 1] p.s.vem)] c.vem])
330+ ::
331+ [s=[%r p=@ q=@ r=@] c=*]
348 :+ %rose
332 :+ %rose
349− [[' ' ~] ['[' ~] [']' ~]]
333+ :* p=(mesc (trip p.s.vem))
350− => .(aug `*`aug)
334+ q=(mesc (trip q.s.vem))
335+ r=(mesc (trip r.s.vem))
336+ ==
351 |- ^- (list tank)
337 |- ^- (list tank)
352− ?: ?=(@ aug)
338+ ?@ c.vem
353− [^$ ~]
339+ ~
354− [^$(aug -.aug) $(aug +.aug)]
340+ [^$(vem -.c.vem) $(c.vem +.c.vem)]
355 ::
341 ::
342+ [s=%z c=*] $(vem [[%r %$ %$ %$] c.vem])
343+ * !!
344+ ==
345+ ++ shep
346+ |= [fom=@ gar=*]
347+ ^- tank
348+ =+ l=(met 3 fom)
349+ =+ i=0
350+ :- %leaf
351+ |- ^- tape
352+ ?: (gte i l)
353+ ~
354+ =+ c=(cut 3 [i 1] fom)
355+ ?. =(37 c)
356+ (weld (mesc [c ~]) $(i +(i)))
357+ =+ d=(cut 3 [+(i) 1] fom)
358+ ?. .?(gar)
359+ ['\\' '#' $(i (add 2 i))]
360+ (weld ~(ram re (show d -.gar)) $(i (add 2 i), gar +.gar))
361+ ::
362+ ++ shop
363+ |= [aug=* vel=$-(a=@ tape)]
364+ ^- tank
365+ ?: ?=(@ aug)
366+ [%leaf (vel aug)]
367+ :+ %rose
368+ [[' ' ~] ['[' ~] [']' ~]]
369+ => .(aug `*`aug)
370+ |- ^- (list tank)
371+ ?: ?=(@ aug)
372+ [^$ ~]
373+ [^$(aug -.aug) $(aug +.aug)]
374+ ::
375+ ++ shol
376+ |= lim=*
377+ :+ %rose
378+ [['.' ~] ~ ~]
379+ |- ^- (list tank)
380+ ?: ?=(@ lim) ~
381+ :_ $(lim +.lim)
382+ ?+ -.lim (show '#')
383+ ~ (show '$')
384+ c=@ (show c.lim)
385+ [%& %1] (show '.')
386+ [%& c=@]
387+ [%leaf '+' ~(rud at c.lim)]
388+ ::
389+ [%| @ ~] (show ',')
390+ [%| n=@ ~ c=@]
391+ [%leaf (weld (reap n.lim '^') ?~(c.lim "$" (trip c.lim)))]
392+ ==
393+ --
356```
394```
357
395
358−XX document
359−
360---
396---
content/docs/hoon/reference/stdlib/4d.md+33−33
@@ -13,10 +13,10 @@ whichever is further along.
13
13
14#### Accepts
14#### Accepts
15
15
16−`naz` is a `hair`.
17−
18`zyc` is a `hair`.
16`zyc` is a `hair`.
19
17
18+`naz` is a `hair`.
19+
20#### Produces
20#### Produces
21
21
22A `hair`.
22A `hair`.
@@ -24,27 +24,27 @@ A `hair`.
24#### Source
24#### Source
25
25
26```hoon
26```hoon
27− ++ last |= [zyc=hair naz=hair]
27+++ last |= [zyc=hair naz=hair]
28− ^- hair
28+ ^- hair
29− ?: =(p.zyc p.naz)
29+ ?: =(p.zyc p.naz)
30− ?:((gth q.zyc q.naz) zyc naz)
30+ ?:((gth q.zyc q.naz) zyc naz)
31− ?:((gth p.zyc p.naz) zyc naz)
31+ ?:((gth p.zyc p.naz) zyc naz)
32```
32```
33
33
34#### Examples
34#### Examples
35
35
36```
36```
37− > (last [1 1] [1 2])
37+> (last [1 1] [1 2])
38− [p=1 q=2]
38+[p=1 q=2]
39
39
40− > (last [2 1] [1 2])
40+> (last [2 1] [1 2])
41− [p=2 q=1]
41+[p=2 q=1]
42
42
43− > (last [0 0] [99 0])
43+> (last [0 0] [99 0])
44− [p=99 q=0]
44+[p=99 q=0]
45
45
46− > (last [7 7] [7 7])
46+> (last [7 7] [7 7])
47− [p=7 q=7]
47+[p=7 q=7]
48```
48```
49
49
50---
50---
@@ -64,37 +64,37 @@ any other character.
64
64
65#### Produces
65#### Produces
66
66
67−A hair.
67+A `hair`.
68
68
69#### Source
69#### Source
70
70
71```hoon
71```hoon
72− ++ lust |= [weq=char naz=hair]
72+++ lust |= [weq=char naz=hair]
73− ^- hair
73+ ^- hair
74− ?:(=(`@`10 weq) [+(p.naz) 1] [p.naz +(q.naz)])
74+ ?:(=(`@`10 weq) [+(p.naz) 1] [p.naz +(q.naz)])
75```
75```
76
76
77#### Examples
77#### Examples
78
78
79```
79```
80− > (lust `a` [1 1])
80+> (lust `a` [1 1])
81− [p=1 q=2]
81+[p=1 q=2]
82
82
83− > (lust `@t`10 [1 1])
83+> (lust `@t`10 [1 1])
84− [p=2 q=1]
84+[p=2 q=1]
85
85
86− > (lust '9' [10 10])
86+> (lust '9' [10 10])
87− [p=10 q=11]
87+[p=10 q=11]
88
88
89− > (roll "maze" [.(+<+ [1 1])]:lust)
89+> (roll "maze" [.(+<+ [1 1])]:lust)
90− [1 5]
90+[1 5]
91
91
92− > %- roll :_ [.(+<+ [1 1])]:lust
92+> %- roll :_ [.(+<+ [1 1])]:lust
93− """
93+ """
94− Sam
94+ Sam
95− lokes
95+ lokes
96− """
96+ """
97− [2 6]
97+[2 6]
98```
98```
99
99
100---
100---
content/docs/hoon/reference/stdlib/4e.md+194−186
@@ -8,7 +8,7 @@ template = "doc.html"
8
8
9Conditional composer
9Conditional composer
10
10
11−Parsing composer: connects the `++edge` `vex` with the subsequent `++rule` `sab`
11+Parsing composer: connects the `edge` `vex` with the subsequent `rule` `sab`
12as an optional suffix, using gate `raq` to compose or reject its
12as an optional suffix, using gate `raq` to compose or reject its
13result. If there is no suffix, or if the suffix fails to be composed
13result. If there is no suffix, or if the suffix fails to be composed
14with the current result, the current result is produced. Used to map a
14with the current result, the current result is produced. Used to map a
@@ -24,50 +24,52 @@ group of rules to a specified output.
24
24
25#### Produces
25#### Produces
26
26
27−A `++rule`.
27+A `rule`.
28
28
29#### Source
29#### Source
30
30
31```hoon
31```hoon
32− ++ bend :: conditional comp
32+++ bend
33− ~/ %bend
33+ ~/ %bend
34− |* raq/_|*({a/* b/*} [~ u=[a b]])
34+ =+ raq=|*([a=* b=*] [~ u=[a b]])
35+ |@
36+ ++ $
35− ~/ %fun
37+ ~/ %fun
36− |* {vex/edge sab/rule}
38+ |* [vex=edge sab=rule]
37− ?~ q.vex
39+ ?~ q.vex
38− vex
40+ vex
39− =+ yit=(sab q.u.q.vex)
41+ =+ yit=(sab q.u.q.vex)
40− =+ yur=(last p.vex p.yit)
42+ =+ yur=(last p.vex p.yit)
41− ?~ q.yit
43+ ?~ q.yit
42− [p=yur q=q.vex]
44+ [p=yur q=q.vex]
43− =+ vux=(raq p.u.q.vex p.u.q.yit)
45+ =+ vux=(raq p.u.q.vex p.u.q.yit)
44− ?~ vux
46+ ?~ vux
45− [p=yur q=q.vex]
47+ [p=yur q=q.vex]
46− [p=yur q=[~ u=[p=u.vux q=q.u.q.yit]]]
48+ [p=yur q=[~ u=[p=u.vux q=q.u.q.yit]]]
47− ::
49+ --
48```
50```
49
51
50#### Examples
52#### Examples
51
53
52```
54```
53− > (;~((bend |=([a/char b/char] ?.(=(a b) ~ (some +(a))))) prn prn) [1 1] "qs")
55+> (;~((bend |=([a=char b=char] ?.(=(a b) ~ (some +(a))))) prn prn) [1 1] "qs")
54− [p=[p=1 q=3] q=[~ u=[p=~~q q=[p=[p=1 q=2] q="s"]]]]
56+[p=[p=1 q=3] q=[~ u=[p=113 q=[p=[p=1 q=2] q="s"]]]]
55
57
56− > (;~((bend |=([a/char b/char] ?.(=(a b) ~ (some +(a))))) prn prn) [1 1] "qqq")
58+> (;~((bend |=([a=char b=char] ?.(=(a b) ~ (some +(a))))) prn prn) [1 1] "qqq")
57− [p=[p=1 q=3] q=[~ u=[p=~~r q=[p=[p=1 q=3] q="q"]]]]
59+[p=[p=1 q=3] q=[~ u=[p=114 q=[p=[p=1 q=3] q="q"]]]]
58
60
59− > (scan "aa" ;~((bend |=([a/char b/char] ?.(=(a b) ~ (some +(a))))) prn prn))
61+> `@t`(scan "aa" ;~((bend |=([a=char b=char] ?.(=(a b) ~ (some +(a))))) prn prn))
60− ~~b
62+'b'
61
63
62− > (scan "ba" ;~((bend |=([a/char b/char] ?.(=(a b) ~ (some +(a))))) prn prn))
64+> (scan "ba" ;~((bend |=([a=char b=char] ?.(=(a b) ~ (some +(a))))) prn prn))
63− ! {1 3}
65+{1 3}
64− ! exit
66+syntax error
65
67
66− > `(unit @tas)`(scan "" ;~((bend) (easy ~) sym))
68+> `(unit @tas)`(scan "" ;~((bend) (easy ~) sym))
67− ~
69+~
68
70
69− > `(unit @tas)`(scan "sep" ;~((bend) (easy ~) sym))
71+> `(unit @tas)`(scan "sep" ;~((bend) (easy ~) sym))
70− [~ %sep]
72+[~ %sep]
71```
73```
72
74
73---
75---
@@ -76,50 +78,53 @@ A `++rule`.
76
78
77Arbitrary compose
79Arbitrary compose
78
80
79−Parsing composer: connects the `++edge` `vex` with a following `++rule` `sab`,
81+Parsing composer: connects the `edge` `vex` with a following `rule` `sab`,
80combining the contents of `vex` with the result of `sab` using a binary
82combining the contents of `vex` with the result of `sab` using a binary
81−gate `raq`. Used to fold over the results of several `++rules`.
83+gate `raq`. Used to fold over the results of several `rule`s.
82
84
83#### Accepts
85#### Accepts
84
86
85`raq` is a gate that accepts a cell of two nouns, `a` and `b`, and
87`raq` is a gate that accepts a cell of two nouns, `a` and `b`, and
86produces a cell of two nouns.
88produces a cell of two nouns.
87
89
88−`sab` is a rule.
89−
90`vex` is an edge.
90`vex` is an edge.
91
91
92+`sab` is a rule.
93+
92#### Produces
94#### Produces
93
95
94−A `++rule`.
96+A `rule`.
95
97
96#### Source
98#### Source
97
99
98```hoon
100```hoon
99− ++ comp
101+++ comp
100− ~/ %comp
102+ ~/ %comp
101− |* raq/_|*({a/* b/*} [a b]) :: arbitrary compose
103+ =+ raq=|*([a=* b=*] [a b])
104+ |@
105+ ++ $
102− ~/ %fun
106+ ~/ %fun
103− |* {vex/edge sab/rule}
107+ |* [vex=edge sab=rule]
104− ~! +<
108+ ~! +<
105− ?~ q.vex
109+ ?~ q.vex
106− vex
110+ vex
107− =+ yit=(sab q.u.q.vex)
111+ =+ yit=(sab q.u.q.vex)
108− =+ yur=(last p.vex p.yit)
112+ =+ yur=(last p.vex p.yit)
109− ?~ q.yit
113+ ?~ q.yit
110− [p=yur q=q.yit]
114+ [p=yur q=q.yit]
111− [p=yur q=[~ u=[p=(raq p.u.q.vex p.u.q.yit) q=q.u.q.yit]]]
115+ [p=yur q=[~ u=[p=(raq p.u.q.vex p.u.q.yit) q=q.u.q.yit]]]
112− ::
116+ --
113```
117```
114
118
115#### Examples
119#### Examples
116
120
117```
121```
118− > (scan "123" ;~((comp |=([a/@u b/@u] (add a b))) dit dit dit))
122+> (scan "123" ;~((comp |=([a=@ud b=@ud] (add a b))) dit dit dit))
119− 6
123+6
124+
120− > (scan "12" ;~((comp |=([a/@u b/@u] (add a b))) dit dit dit))
125+> (scan "12" ;~((comp |=([a=@ud b=@ud] (add a b))) dit dit dit))
121− ! {1 3}
126+{1 3}
122− ! exit
127+syntax error
123```
128```
124
129
125---
130---
@@ -128,31 +133,31 @@ A `++rule`.
128
133
129Never parse
134Never parse
130
135
131−Produces an `++edge` at the same text position (`++hair`) with a failing
136+Produces an `edge` at the same text position (`hair`) with a failing
132result (`q=~`).
137result (`q=~`).
133
138
134#### Accepts
139#### Accepts
135
140
136−`tub` is a `++nail`.
141+`tub` is a `nail`.
137
142
138#### Produces
143#### Produces
139
144
140−An `++edge`.
145+An `edge`.
141
146
142#### Source
147#### Source
143
148
144```hoon
149```hoon
145− ++ fail |=(tub/nail [p=p.tub q=~]) :: never parse
150+++ fail |=(tub=nail [p=p.tub q=~])
146```
151```
147
152
148#### Examples
153#### Examples
149
154
150```
155```
151− > (fail [[1 1] "abc"])
156+> (fail [[1 1] "abc"])
152− [p=[p=1 q=1] q=~]
157+[p=[p=1 q=1] q=~]
153
158
154− > (fail [[p=1.337 q=70] "Parse me, please?"])
159+> (fail [[p=1.337 q=70] "Parse me, please?"])
155− [p=[p=1.337 q=70] q=~]
160+[p=[p=1.337 q=70] q=~]
156```
161```
157
162
158---
163---
@@ -161,46 +166,41 @@ An `++edge`.
161
166
162Skip delimiter
167Skip delimiter
163
168
164−Parsing composer: connects an `++edge` `vex` with a following `++rule` `sab` by
169+Parsing composer: connects an `edge` `vex` with a following `rule` `sab` by
165−parsing the `++rule` `bus` (the delimiting symbol) and throwing out the
170+parsing the `rule` `bus` (the delimiting symbol) and throwing out the
166result.
171result.
167
172
168#### Accepts
173#### Accepts
169
174
170−`bus` is a `++rule`.
175+`bus` is a `rule`.
171
176
172−`sab` is a `++rule`.
177+`vex` is an `edge`.
173
178
174−`vex` is an `++edge`.
179+`sab` is a `rule`.
175
180
176#### Produces
181#### Produces
177
182
183+A `rule`.
184+
178#### Source
185#### Source
179
186
180```hoon
187```hoon
181− ++ glue :: add rule
188+++ glue
182− ~/ %glue
189+ ~/ %glue
183− |* bus/rule
190+ |* bus=rule
184− ~/ %fun
191+ ~/ %fun
185− |* {vex/edge sab/rule}
192+ |* [vex=edge sab=rule]
186− (plug vex ;~(pfix bus sab))
193+ (plug vex ;~(pfix bus sab))
187− ::
188```
194```
189
195
190#### Examples
196#### Examples
191
197
192```
198```
193− > (scan "200|mal|bon" ;~((glue bar) dem sym sym))
194− [q=200 7.102.829 7.237.474]
195−
196− > `[@u @tas @tas]`(scan "200|mal|bon" ;~((glue bar) dem sym sym))
199+> `[@ud @tas @tas]`(scan "200|mal|bon" ;~((glue bar) dem sym sym))
197− [200 %mal %bon]
200+[200 %mal %bon]
198
201
199− > (scan "200|;|bon" ;~((glue bar) dem sem sym))
202+> `[@ud @t @tas]`(scan "200|;|bon" ;~((glue bar) dem mic sym))
200− [q=200 ~~~3b. 7.237.474]
203+[200 ';' %bon]
201−
202− > (scan "200.;.bon" ;~((glue dot) dem sem sym))
203− [q=200 ~~~3b. 7.237.474]
204```
204```
205
205
206---
206---
@@ -209,42 +209,43 @@ result.
209
209
210Parse unless
210Parse unless
211
211
212−Parsing composer: if an `++edge` `vex` reflects a success, fail. Otherwise,
212+Parsing composer: if an `edge` `vex` reflects a success, fail. Otherwise,
213−connect `vex` with the following `++rule`.
213+connect `vex` with the following `rule`.
214
214
215#### Accepts
215#### Accepts
216
216
217−`sab` is a `++rule`.
217+`vex` is an `edge`.
218
218
219−`vex` is an `++edge`.
219+`sab` is a `rule`.
220
220
221#### Produces
221#### Produces
222
222
223+An `edge`.
224+
223#### Source
225#### Source
224
226
225```hoon
227```hoon
226− ++ less :: no first and second
228+++ less
227− |* {vex/edge sab/rule}
229+ |* [vex=edge sab=rule]
228− ?~ q.vex
230+ ?~ q.vex
229− =+ roq=(sab)
231+ =+ roq=(sab)
230− [p=(last p.vex p.roq) q=q.roq]
232+ [p=(last p.vex p.roq) q=q.roq]
231− (fail +<.sab)
233+ (fail +<.sab)
232− ::
233```
234```
234
235
235#### Examples
236#### Examples
236
237
237```
238```
238− > (scan "sas-/lo" (star ;~(less lus bar prn)))
239+> (scan "sas-/lo" (star ;~(less lus bar prn)))
239− "sas-/lo"
240+"sas-/lo"
240
241
241− > (scan "sas-/l+o" (star ;~(less lus bar prn)))
242+> (scan "sas-/l+o" (star ;~(less lus bar prn)))
242− ! {1 8}
243+! {1 8}
243− ! exit
244+! exit
244
245
245− > (scan "sas|-/lo" (star ;~(less lus bar prn)))
246+> (scan "sas|-/lo" (star ;~(less lus bar prn)))
246− ! {1 5}
247+! {1 5}
247− ! exit
248+! exit
248```
249```
249
250
250---
251---
@@ -253,31 +254,37 @@ connect `vex` with the following `++rule`.
253
254
254Discard first rule
255Discard first rule
255
256
256−Parsing composer: connects an `++edge` `vex` with two subsequent `++rule`s,
257+Parsing composer: connects an `edge` `vex` with two subsequent `rule`s,
257ignoring the result of the first and producing the result of the second.
258ignoring the result of the first and producing the result of the second.
258
259
259#### Accepts
260#### Accepts
260
261
261−`vex` is an edge.
262+`vex` is an `edge`.
263+
264+`sab` is a `rule`.
262
265
263#### Produces
266#### Produces
264
267
268+An `edge`.
269+
265#### Source
270#### Source
266
271
267```hoon
272```hoon
268− ++ pfix :: discard first rule
273+++ pfix
269− ~/ %pfix
274+ ~/ %pfix
275+ |* sam=[vex=edge sab=rule]
276+ %. sam
270− (comp |*({a/* b/*} b))
277+ (comp |*([a=* b=*] b))
271```
278```
272
279
273#### Examples
280#### Examples
274
281
275```
282```
276− > `@t`(scan "%him" ;~(pfix cen sym))
283+> `@t`(scan "%him" ;~(pfix cen sym))
277− 'him'
284+'him'
278
285
279− > (scan "+++10" ;~(pfix (star lus) dem))
286+> (scan "+++10" ;~(pfix (star lus) dem))
280− q=10
287+10
281```
288```
282
289
283---
290---
@@ -286,45 +293,40 @@ ignoring the result of the first and producing the result of the second.
286
293
287Parse to tuple
294Parse to tuple
288
295
289−Parsing composer: connects an `++edge` `vex` with a following `++rule` `sab`, producing
296+Parsing composer: connects an `edge` `vex` with a following `rule` `sab`,
290−a cell of both the results. See also: the monad applicator ;\~ for a
297+producing a cell of both the results. See also: the monad applicator `;~` for a
291more detailed explanation.
298more detailed explanation.
292
299
293#### Accepts
300#### Accepts
294
301
295−`sab` is a `++rule`.
302+`vex` is an `edge`.
296
303
297−`vex` is an `++edge`.
304+`sab` is a `rule`.
298
305
299#### Produces
306#### Produces
300
307
308+An `edge`.
309+
301#### Source
310#### Source
302
311
303```hoon
312```hoon
304− ++ plug :: first then second
313+++ plug
305− ~/ %plug
314+ ~/ %plug
306− |* {vex/edge sab/rule}
315+ |* [vex=edge sab=rule]
307− ?~ q.vex
316+ ?~ q.vex
308− vex
317+ vex
309− =+ yit=(sab q.u.q.vex)
318+ =+ yit=(sab q.u.q.vex)
310− =+ yur=(last p.vex p.yit)
319+ =+ yur=(last p.vex p.yit)
311− ?~ q.yit
320+ ?~ q.yit
312− [p=yur q=q.yit]
321+ [p=yur q=q.yit]
313− [p=yur q=[~ u=[p=[p.u.q.vex p.u.q.yit] q=q.u.q.yit]]]
322+ [p=yur q=[~ u=[p=[p.u.q.vex p.u.q.yit] q=q.u.q.yit]]]
314− ::
315```
323```
316
324
317#### Examples
325#### Examples
318
326
319```
327```
320− > (scan "1..20" ;~(plug dem dot dot dem))
328+> (scan "1..20" ;~(plug dem dot dot dem))
321− [q=1 ~~~. ~~~. q=20]
329+[1 '.' '.' 20]
322−
323− > (scan "moke/~2014.1.1" ;~(plug sym fas nuck:so))
324− [1.701.539.693 ~~~2f. [% p=[p=~.da q=170.141.184.500.766.106.671.844.917.172.921.958.400]]]
325−
326− > ;;(,[@tas @t ~ %da @da] (scan "moke/~2014.1.1" ;~(plug sym fas nuck:so)))
327− [%moke '/' ~ %da ~2014.1.1]
328```
330```
329
331
330---
332---
@@ -334,44 +336,45 @@ more detailed explanation.
334Parse options
336Parse options
335
337
336Parsing composer: if `vex` reflects a failure, connect it with the
338Parsing composer: if `vex` reflects a failure, connect it with the
337−following rule `sab`. See also: the monad applicator ;\~
339+following rule `sab`. See also: the monad applicator `;~`
338
340
339#### Accepts
341#### Accepts
340
342
341−`sab` is a `++rule`.
343+`vex` is an `edge`.
342
344
343−`vex` is an `++edge`.
345+`sab` is a `rule`.
344
346
345#### Produces
347#### Produces
346
348
349+An `edge`.
350+
347#### Source
351#### Source
348
352
349```hoon
353```hoon
350− ++ pose :: first or second
354+++ pose
351− ~/ %pose
355+ ~/ %pose
352− |* {vex/edge sab/rule}
356+ |* [vex=edge sab=rule]
353− ?~ q.vex
357+ ?~ q.vex
354− =+ roq=(sab)
358+ =+ roq=(sab)
355− [p=(last p.vex p.roq) q=q.roq]
359+ [p=(last p.vex p.roq) q=q.roq]
356− vex
360+ vex
357− ::
358```
361```
359
362
360#### Examples
363#### Examples
361
364
362```
365```
363− > `@t`(scan "+" ;~(pose lus tar cen))
366+> `@t`(scan "+" ;~(pose lus tar cen))
364− '+'
367+'+'
365
368
366− > `@t`(scan "*" ;~(pose lus tar cen))
369+> `@t`(scan "*" ;~(pose lus tar cen))
367− '*'
370+'*'
368
371
369− > `@t`(scan "%" ;~(pose lus tar cen))
372+> `@t`(scan "%" ;~(pose lus tar cen))
370− '%'
373+'%'
371
374
372− > `@t`(scan "-" ;~(pose lus tar cen))
375+> `@t`(scan "-" ;~(pose lus tar cen))
373− ! {1 1}
376+! {1 1}
374− ! exit
377+! exit
375```
378```
376
379
377---
380---
@@ -380,33 +383,37 @@ following rule `sab`. See also: the monad applicator ;\~
380
383
381Discard second rule
384Discard second rule
382
385
383−Parsing composer: connects `++edge`s `vex` with two subsequent `++rule`s returning the
386+Parsing composer: connects `edge` `vex` with two subsequent `rule`s returning the
384result of the first and discarding the result of the second.
387result of the first and discarding the result of the second.
385
388
386#### Accepts
389#### Accepts
387
390
388−`a` is the result of parsing the first `++rule`.
391+`vex` is an `edge`.
389
392
390−`b` is the result of of parsing the second `++rule`.
393+`sab` is a `rule`.
391
394
392#### Produces
395#### Produces
393
396
397+An `edge`.
398+
394#### Source
399#### Source
395
400
396```hoon
401```hoon
397− ++ sfix :: discard second rule
402+++ sfix
398− ~/ %sfix
403+ ~/ %sfix
404+ |* sam=[vex=edge sab=rule]
405+ %. sam
399− (comp |*({a/* b/*} a))
406+ (comp |*([a=* b=*] a))
400```
407```
401
408
402#### Examples
409#### Examples
403
410
404```
411```
405− > `@t`(scan "him%" ;~(sfix sym cen))
412+> `@t`(scan "him%" ;~(sfix sym cen))
406− 'him'
413+'him'
407
414
408− > (scan "10+++" ;~(sfix dem (star lus)))
415+> (scan "10+++" ;~(sfix dem (star lus)))
409− q=10
416+q=10
410```
417```
411
418
412---
419---
@@ -415,44 +422,45 @@ result of the first and discarding the result of the second.
415
422
416First and second
423First and second
417
424
418−Parsing composer: if an `++edge` `vex` reflects a failure, fail. Otherwise,
425+Parsing composer: if an `edge` `vex` reflects a failure, fail. Otherwise,
419−connect `vex` with the following `++rule`.
426+connect `vex` with the following `rule`.
420
427
421#### Accepts
428#### Accepts
422
429
423−`sab` is a `++rule`.
430+`vex` is an `edge`.
424
431
425−`vex` is an `++edge`.
432+`sab` is a `rule`.
426
433
427#### Produces
434#### Produces
428
435
436+An `edge`.
437+
429#### Source
438#### Source
430
439
431```hoon
440```hoon
432− ++ simu :: first and second
441+++ simu
433− |* {vex/edge sab/rule}
442+ |* [vex=edge sab=rule]
434− ?~ q.vex
443+ ?~ q.vex
435− vex
444+ vex
436− =+ roq=(sab)
445+ =+ roq=(sab)
437− roq
446+ roq
438− ::
439```
447```
440
448
441#### Examples
449#### Examples
442
450
443```
451```
444− > (scan "~zod" scat:vast)
452+> (scan "~zod" scat:vast)
445− [%dtzy p=%p q=0]
453+[%dtzy p=%p q=0]
446
454
447− > (scan "%zod" scat:vast)
455+> (scan "%zod" scat:vast)
448− [%dtzz p=%tas q=6.582.138]
456+[%dtzz p=%tas q=6.582.138]
449
457
450− > (scan "%zod" ;~(simu cen scat:vast))
458+> (scan "%zod" ;~(simu cen scat:vast))
451− [%dtzz p=%tas q=6.582.138]
459+[%dtzz p=%tas q=6.582.138]
452
460
453− > (scan "~zod" ;~(simu cen scat:vast))
461+> (scan "~zod" ;~(simu cen scat:vast))
454− ! {1 1}
462+! {1 1}
455− ! exit
463+! exit
456```
464```
457
465
458---
466---
content/docs/hoon/reference/stdlib/4f.md+710−521
@@ -7,41 +7,40 @@ template = "doc.html"
7## `++bass`
7## `++bass`
8
8
9Parser modifier: LSB
9Parser modifier: LSB
10−ordered `++list` as atom of a `++base`.
10+ordered `list` as atom of a `base`.
11
11
12#### Accepts
12#### Accepts
13
13
14`wuc` is an atom.
14`wuc` is an atom.
15
15
16−`tyd` is a `++rule`.
16+`tyd` is a `rule`.
17
17
18#### Produces
18#### Produces
19
19
20−A `++rule`.
20+A `rule`.
21
21
22#### Source
22#### Source
23
23
24```hoon
24```hoon
25− ++ bass
25+++ bass
26− |* {wuc/@ tyd/rule}
26+ |* [wuc=@ tyd=rule]
27− %+ cook
27+ %+ cook
28− |= waq/(list @)
28+ |= waq=(list @)
29− %+ roll
29+ %+ roll
30− waq
30+ waq
31− =|({p/@ q/@} |.((add p (mul wuc q))))
31+ =|([p=@ q=@] |.((add p (mul wuc q))))
32− tyd
32+ tyd
33− ::
34```
33```
35
34
36#### Examples
35#### Examples
37
36
38```
37```
39− > (scan "123" (bass 10 (star dit)))
38+> (scan "123" (bass 10 (star dit)))
40− q=123
39+q=123
41− > (scan "123" (bass 8 (star dit)))
40+> (scan "123" (bass 8 (star dit)))
42− q=83
41+q=83
43− > `@ub`(scan "123" (bass 8 (star dit)))
42+> `@ub`(scan "123" (bass 8 (star dit)))
44− 0b101.0011
43+0b101.0011
45```
44```
46
45
47---
46---
@@ -50,43 +49,42 @@ A `++rule`.
50
49
51Parser modifier: LSB
50Parser modifier: LSB
52
51
53−Ordered `++list` as atom of a `++base`.
52+Ordered `list` as atom of a `base`.
54
53
55#### Accepts
54#### Accepts
56
55
57`wuc` is an atom.
56`wuc` is an atom.
58
57
59−`tyd` is a `++rule`.
58+`tyd` is a `rule`.
60
59
61#### Produces
60#### Produces
62
61
63−A `++rule`.
62+A `rule`.
64
63
65#### Source
64#### Source
66
65
67```hoon
66```hoon
68− ++ boss
67+++ boss
69− |* {wuc/@ tyd/rule}
68+ |* [wuc=@ tyd=rule]
70− %+ cook
69+ %+ cook
71− |= waq/(list @)
70+ |= waq=(list @)
72− %+ reel
71+ %+ reel
73− waq
72+ waq
74− =|({p/@ q/@} |.((add p (mul wuc q))))
73+ =|([p=@ q=@] |.((add p (mul wuc q))))
75− tyd
74+ tyd
76− ::
77```
75```
78
76
79#### Examples
77#### Examples
80
78
81```
79```
82− > (scan "123" (boss 10 (star dit)))
80+> (scan "123" (boss 10 (star dit)))
83− q=321
81+321
84
82
85− > `@t`(scan "bam" (boss 256 (star alp)))
83+> `@t`(scan "bam" (boss 256 (star alp)))
86− 'bam'
84+'bam'
87
85
88− > `@ux`(scan "bam" (boss 256 (star alp)))
86+> `@ux`(scan "bam" (boss 256 (star alp)))
89− 0x6d.6162
87+0x6d.6162
90```
88```
91
89
92---
90---
@@ -95,41 +93,41 @@ A `++rule`.
95
93
96Replace with constant
94Replace with constant
97
95
98−Parser modifier. Accepts a `++rule` `sef` and produces a parser that
96+Parser modifier. Accepts a `rule` `sef` and produces a parser that produces a
99−produces a constant `cus`, assuming `sef` is successful.
97+constant `cus`, assuming `sef` is successful.
100
98
101#### Accepts
99#### Accepts
102
100
103`cus` is a constant noun.
101`cus` is a constant noun.
104
102
105−`sef` is a `++rule`.
103+`sef` is a `rule`.
106
104
107#### Produces
105#### Produces
108
106
109−An `++edge`.
107+An `edge`.
110
108
111#### Source
109#### Source
112
110
113```hoon
111```hoon
114− ++ cold :: replace w+ constant
112+++ cold
115− ~/ %cold
113+ ~/ %cold
116− |* {cus/* sef/rule}
114+ |* [cus=* sef=rule]
117− ~/ %fun
115+ ~/ %fun
118− |= tub/nail
116+ |= tub=nail
119− =+ vex=(sef tub)
117+ =+ vex=(sef tub)
120− ?~ q.vex
118+ ?~ q.vex
121− vex
119+ vex
122− [p=p.vex q=[~ u=[p=cus q=q.u.q.vex]]]
120+ [p=p.vex q=[~ u=[p=cus q=q.u.q.vex]]]
123```
121```
124
122
125#### Examples
123#### Examples
126
124
127```
125```
128− > ((cold %foo (just 'a')) [[1 1] "abc"])
126+> ((cold %foo (just 'a')) [[1 1] "abc"])
129− [p=[p=1 q=2] q=[~ u=[p=%foo q=[p=[p=1 q=2] q="bc"]]]]
127+[p=[p=1 q=2] q=[~ u=[p=%foo q=[p=[p=1 q=2] q="bc"]]]]
130
128
131− > ((cold %foo (just 'a')) [[1 1] "bc"])
129+> ((cold %foo (just 'a')) [[1 1] "bc"])
132− [p=[p=1 q=1] q=~]
130+[p=[p=1 q=1] q=~]
133```
131```
134
132
135---
133---
@@ -139,47 +137,46 @@ An `++edge`.
139Apply gate
137Apply gate
140
138
141Parser modifier. Produces a parser that takes a (successful) result of a
139Parser modifier. Produces a parser that takes a (successful) result of a
142−`++rule` `sef` and slams it through `poq`.
140+`rule` `sef` and slams it through `poq`.
143
141
144#### Accepts
142#### Accepts
145
143
146`poq` is a gate.
144`poq` is a gate.
147
145
148−`sef` is a `++rule`.
146+`sef` is a `rule`.
149
147
150#### Produces
148#### Produces
151
149
152−An `++rule`.
150+An `rule`.
153
151
154#### Source
152#### Source
155
153
156```hoon
154```hoon
157− ++ cook :: apply gate
155+++ cook
158− ~/ %cook
156+ ~/ %cook
159− |* {poq/gate sef/rule}
157+ |* [poq=gate sef=rule]
160− ~/ %fun
158+ ~/ %fun
161− |= tub/nail
159+ |= tub=nail
162− =+ vex=(sef tub)
160+ =+ vex=(sef tub)
163− ?~ q.vex
161+ ?~ q.vex
164− vex
162+ vex
165− [p=p.vex q=[~ u=[p=(poq p.u.q.vex) q=q.u.q.vex]]]
163+ [p=p.vex q=[~ u=[p=(poq p.u.q.vex) q=q.u.q.vex]]]
166− ::
167```
164```
168
165
169#### Examples
166#### Examples
170
167
171```
168```
172− > ((cook ,@ud (just 'a')) [[1 1] "abc"])
169+> ((cook ,@ud (just 'a')) [[1 1] "abc"])
173− [p=[p=1 q=2] q=[~ u=[p=97 q=[p=[p=1 q=2] q="bc"]]]]
170+[p=[p=1 q=2] q=[~ u=[p=97 q=[p=[p=1 q=2] q="bc"]]]]
174
171
175− > ((cook ,@tas (just 'a')) [[1 1] "abc"])
172+> ((cook ,@tas (just 'a')) [[1 1] "abc"])
176− [p=[p=1 q=2] q=[~ u=[p=%a q=[p=[p=1 q=2] q="bc"]]]]
173+[p=[p=1 q=2] q=[~ u=[p=%a q=[p=[p=1 q=2] q="bc"]]]]
177
174
178− > ((cook |=(a=@ +(a)) (just 'a')) [[1 1] "abc"])
175+> ((cook |=(a=@ +(a)) (just 'a')) [[1 1] "abc"])
179− [p=[p=1 q=2] q=[~ u=[p=98 q=[p=[p=1 q=2] q="bc"]]]]
176+[p=[p=1 q=2] q=[~ u=[p=98 q=[p=[p=1 q=2] q="bc"]]]]
180
177
181− > ((cook |=(a=@ `@t`+(a)) (just 'a')) [[1 1] "abc"])
178+> ((cook |=(a=@ `@t`+(a)) (just 'a')) [[1 1] "abc"])
182− [p=[p=1 q=2] q=[~ u=[p='b' q=[p=[p=1 q=2] q="bc"]]]]
179+[p=[p=1 q=2] q=[~ u=[p='b' q=[p=[p=1 q=2] q="bc"]]]]
183```
180```
184
181
185---
182---
@@ -197,32 +194,71 @@ without consuming any text.
197
194
198#### Produces
195#### Produces
199
196
200−A `++rule`.
197+A `rule`.
201
198
202#### Source
199#### Source
203
200
204```hoon
201```hoon
205− ++ easy :: always parse
202+++ easy
206− ~/ %easy
203+ ~/ %easy
207− |* huf=*
204+ |* huf=*
208− ~/ %fun
205+ ~/ %fun
209− |= tub=nail
206+ |= tub=nail
210− ^- (like ,_huf)
207+ ^- (like _huf)
211− [p=p.tub q=[~ u=[p=huf q=tub]]]
208+ [p=p.tub q=[~ u=[p=huf q=tub]]]
212− ::
213```
209```
214
210
215#### Examples
211#### Examples
216
212
217```
213```
218− > ((easy %foo) [[1 1] "abc"])
214+> ((easy %foo) [[1 1] "abc"])
219− [p=[p=1 q=1] q=[~ [p=%foo q=[p=[p=1 q=1] q="abc"]]]]
215+[p=[p=1 q=1] q=[~ [p=%foo q=[p=[p=1 q=1] q="abc"]]]]
220
216
221− > ((easy %foo) [[1 1] "bc"])
217+> ((easy %foo) [[1 1] "bc"])
222− [p=[p=1 q=1] q=[~ [p=%foo q=[p=[p=1 q=1] q="bc"]]]]
218+[p=[p=1 q=1] q=[~ [p=%foo q=[p=[p=1 q=1] q="bc"]]]]
223
219
224− > ((easy 'a') [[1 1] "bc"])
220+> ((easy 'a') [[1 1] "bc"])
225− [p=[p=1 q=1] q=[~ [p='a' q=[p=[p=1 q=1] q="bc"]]]]
221+[p=[p=1 q=1] q=[~ [p='a' q=[p=[p=1 q=1] q="bc"]]]]
222+```
223+
224+---
225+
226+## `++fuss`
227+
228+Has A or B?
229+
230+If string `sic` is parsed: `%.y`. If string `non` is parsed: `%.n`. Otherwise, fail.
231+
232+#### Accepts
233+
234+`sic` is a `@t`.
235+
236+`non` is a `@t`.
237+
238+#### Produces
239+
240+A `rule`.
241+
242+#### Source
243+
244+```hoon
245+++ fuss
246+ |= [sic=@t non=@t]
247+ ;~(pose (cold %& (jest sic)) (cold %| (jest non)))
248+```
249+
250+#### Examples
251+
252+```
253+> (rash 'foo' (fuss 'foo' 'bar'))
254+%.y
255+
256+> (rash 'bar' (fuss 'foo' 'bar'))
257+%.n
258+
259+> (rash 'baz' (fuss 'foo' 'bar'))
260+{1 3}
261+syntax error
226```
262```
227
263
228---
264---
@@ -231,39 +267,38 @@ A `++rule`.
231
267
232Parse to end
268Parse to end
233
269
234−Parser modifier. Accepts a `++rule` `sef`, and produces a parser that succeeds only
270+Parser modifier. Accepts a `rule` `sef`, and produces a parser that succeeds
235−when the of `tub` is fully consumed using `sef`.
271+only when the `tape` of `tub` is fully consumed using `sef`.
236
272
237#### Accepts
273#### Accepts
238
274
239−`sef` is a `++rule`.
275+`sef` is a `rule`.
240
276
241#### Produces
277#### Produces
242
278
243−A `++rule`.
279+A `rule`.
244
280
245#### Source
281#### Source
246
282
247```hoon
283```hoon
248− ++ full :: parse to end
284+++ full
249− |* sef=_rule
285+ |* sef=rule
250− |= tub=nail
286+ |= tub=nail
251− =+ vex=(sef tub)
287+ =+ vex=(sef tub)
252− ?~(q.vex vex ?:(=(~ q.q.u.q.vex) vex [p=p.vex q=~]))
288+ ?~(q.vex vex ?:(=(~ q.q.u.q.vex) vex [p=p.vex q=~]))
253− ::
254```
289```
255
290
256#### Examples
291#### Examples
257
292
258```
293```
259− > ((full (just 'a')) [[1 1] "ab"])
294+> ((full (just 'a')) [[1 1] "ab"])
260− [p=[p=1 q=2] q=~]
295+[p=[p=1 q=2] q=~]
261
296
262− > ((full (jest 'ab')) [[1 1] "ab"])
297+> ((full (jest 'ab')) [[1 1] "ab"])
263− [p=[p=1 q=3] q=[~ u=[p='ab' q=[p=[p=1 q=3] q=""]]]]
298+[p=[p=1 q=3] q=[~ u=[p='ab' q=[p=[p=1 q=3] q=""]]]]
264
299
265− > ((full ;~(plug (just 'a') (just 'b'))) [[1 1] "ab"])
300+> ((full ;~(plug (just 'a') (just 'b'))) [[1 1] "ab"])
266− [p=[p=1 q=3] q=[~ u=[p=[~~a ~~b] q=[p=[p=1 q=3] q=""]]]]
301+[p=[p=1 q=3] q=[~ u=[p=['a' 'b'] q=[p=[p=1 q=3] q=""]]]]
267```
302```
268
303
269---
304---
@@ -272,35 +307,35 @@ A `++rule`.
272
307
273Add to tape
308Add to tape
274
309
275−Parser modifier: prepend text to `++tape` before applying parser.
310+Parser modifier: prepend text to `tape` before applying parser.
276
311
277#### Accepts
312#### Accepts
278
313
279−`pre` is a `++tape`
314+`pre` is a `tape`
280
315
281−`sef` is a `++rule`
316+`sef` is a `rule`
282
317
283#### Produces
318#### Produces
284
319
285−A `++rule`.
320+A `rule`.
286
321
287#### Source
322#### Source
288
323
289```hoon
324```hoon
290− ++ funk :: add to tape first
325+++ funk
291− |* {pre/tape sef/rule}
326+ |* [pre=tape sef=rule]
292− |= tub/nail
327+ |= tub=nail
293− (sef p.tub (weld pre q.tub))
328+ (sef p.tub (weld pre q.tub))
294```
329```
295
330
296#### Examples
331#### Examples
297
332
298```
333```
299− > ((funk "abc prefix-" (jest 'abc')) [[1 1] "to be parsed"])
334+> ((funk "abc prefix-" (jest 'abc')) [[1 1] "to be parsed"])
300− [p=[p=1 q=4] q=[~ [p='abc' q=[p=[p=1 q=4] q=" prefix-to be parsed"]]]]
335+[p=[p=1 q=4] q=[~ [p='abc' q=[p=[p=1 q=4] q=" prefix-to be parsed"]]]]
301
336
302− > ((funk "parse" (just 'a')) [[1 4] " me"])
337+> ((funk "parse" (just 'a')) [[1 4] " me"])
303− [p=[p=1 q=4] q=~]
338+[p=[p=1 q=4] q=~]
304```
339```
305
340
306---
341---
@@ -311,85 +346,139 @@ Place-based apply
311
346
312Parser modifier. Similar to `++cook` in that it produces a parser that takes a
347Parser modifier. Similar to `++cook` in that it produces a parser that takes a
313(successful) result of `sef` and slams it through `hez`. `hez` accepts a
348(successful) result of `sef` and slams it through `hez`. `hez` accepts a
314−`++pint` `a` and a noun `b`, which is what the parser parsed.
349+`pint` `a` and a noun `b`, which is what the parser parsed.
315
350
316#### Accepts
351#### Accepts
317
352
318`hez` is a gate.
353`hez` is a gate.
319
354
320−`sef` is a `++rule`
355+`sef` is a `rule`
321
356
322#### Produces
357#### Produces
323
358
324−A `++rule`.
359+A `rule`.
325
360
326#### Source
361#### Source
327
362
328```hoon
363```hoon
329− ++ here :: place-based apply
364+++ here
330− ~/ %here
365+ ~/ %here
331− |* {hez/_|=({a/pint b/*} [a b]) sef/rule}
366+ =+ [hez=|=([a=pint b=*] [a b]) sef=*rule]
367+ |@
368+ ++ $
332− ~/ %fun
369+ ~/ %fun
333− |= tub/nail
370+ |= tub=nail
334− =+ vex=(sef tub)
371+ =+ vex=(sef tub)
335− ?~ q.vex
372+ ?~ q.vex
336− vex
373+ vex
337− [p=p.vex q=[~ u=[p=(hez [p.tub p.q.u.q.vex] p.u.q.vex) q=q.u.q.vex]]]
374+ [p=p.vex q=[~ u=[p=(hez [p.tub p.q.u.q.vex] p.u.q.vex) q=q.u.q.vex]]]
338− ::
375+ --
339```
376```
340
377
341#### Examples
378#### Examples
342
379
343```
380```
344− > (scan "abc" (star alf))
381+> (scan "abc" (star alf))
345− "abc"
382+"abc"
383+
384+> (scan "abc" (here |*(^ +<) (star alf)))
385+[[[p=1 q=1] p=1 q=4] "abc"]
386+
387+> (scan "abc" (star (here |*(^ +<) alf)))
388+~[[[[p=1 q=1] p=1 q=2] ~~a] [[[p=1 q=2] p=1 q=3] ~~b] [[[p=1 q=3] p=1 q=4] ~~c]]
389+```
390+
391+## `++inde`
392+
393+Indentation block
394+
395+Apply `rule` to indented block starting at current column number, omitting the
396+leading whitespace.
397+
398+#### Accepts
399+
400+`sef` is a `rule`.
401+
402+#### Produces
403+
404+A `rule`.
405+
406+#### Source
407+
408+```hoon
409+++ inde |* sef=rule
410+ |= nail ^+ (sef)
411+ =+ [har tap]=[p q]:+<
412+ =+ lev=(fil 3 (dec q.har) ' ')
413+ =+ eol=(just `@t`10)
414+ =+ =- roq=((star ;~(pose prn ;~(sfix eol (jest lev)) -)) har tap)
415+ ;~(simu ;~(plug eol eol) eol)
416+ ?~ q.roq roq
417+ =+ vex=(sef har(q 1) p.u.q.roq)
418+ =+ fur=p.vex(q (add (dec q.har) q.p.vex))
419+ ?~ q.vex vex(p fur)
420+ =- vex(p fur, u.q -)
421+ :+ &3.vex
422+ &4.vex(q.p (add (dec q.har) q.p.&4.vex))
423+ =+ res=|4.vex
424+ |- ?~ res |4.roq
425+ ?. =(10 -.res) [-.res $(res +.res)]
426+ (welp [`@t`10 (trip lev)] $(res +.res))
427+```
346
428
347− > (scan "abc" (here |*(^ +<) (star alf)))
429+#### Examples
348− [[[p=1 q=1] p=1 q=4] "abc"]
349
430
350− > (scan "abc" (star (here |*(^ +<) alf)))
431+```
351− ~[[[[p=1 q=1] p=1 q=2] ~~a] [[[p=1 q=2] p=1 q=3] ~~b] [[[p=1 q=3] p=1 q=4] ~~c]]
432+> `tape`(scan " foo\0a bar" ;~(pfix ace ace ace (inde (star ;~(pose prn (just '\0a'))))))
433+"foo\0abar"
352```
434```
353
435
436+#### Discussion
437+
438+Note the amount of indentation whitespace to be stripped from the beginning of
439+each line is determined by the value of `q` (the column) in the `hair` when
440+`++inde` is first called. This means something like the `pfix` expression in the
441+example above is necessary to set the level of indentation. Additionally, the
442+`rule` given to `++inde` must consume the whole line including the line ending.
443+
354---
444---
355
445
356## `++ifix`
446## `++ifix`
357
447
358Infix
448Infix
359
449
360−Parser modifier: surround with pair of `++rule`s, the output of which is
450+Parser modifier: surround with pair of `rule`s, the output of which is
361discarded.
451discarded.
362
452
363#### Accepts
453#### Accepts
364
454
365−`fel` is a pair of `++rule`s.
455+`fel` is a pair of `rule`s.
366
456
367−`hof` is a `++rule`.
457+`hof` is a `rule`.
368
458
369#### Produces
459#### Produces
370
460
371−A `++rule`.
461+A `rule`.
372
462
373#### Source
463#### Source
374
464
375```hoon
465```hoon
376− ++ ifix
466+++ ifix
377− |* {fel/{rule rule} hof/rule}
467+ |* [fel=[rule rule] hof=rule]
378− ~! +<
468+ ~! +<
379− ~! +<:-.fel
469+ ~! +<:-.fel
380− ~! +<:+.fel
470+ ~! +<:+.fel
381− ;~(pfix -.fel ;~(sfix hof +.fel))
471+ ;~(pfix -.fel ;~(sfix hof +.fel))
382− ::
383```
472```
384
473
385#### Examples
474#### Examples
386
475
387```
476```
388− > (scan "-40-" (ifix [hep hep] dem))
477+> (scan "-40-" (ifix [hep hep] dem))
389− q=40
478+40
390
479
391− > (scan "4my4" (ifix [dit dit] (star alf)))
480+> (scan "4my4" (ifix [dit dit] (star alf)))
392− "my"
481+"my"
393```
482```
394
483
395---
484---
@@ -406,43 +495,42 @@ Match and consume a cord.
406
495
407#### Produces
496#### Produces
408
497
409−An `++edge`.
498+A `rule`.
410
499
411#### Source
500#### Source
412
501
413```hoon
502```hoon
414− ++ jest :: match a cord
503+++ jest
415− |= daf/@t
504+ |= daf=@t
416− |= tub/nail
505+ |= tub=nail
417− =+ fad=daf
506+ =+ fad=daf
418− |- ^- (like @t)
507+ |- ^- (like @t)
419− ?: =(`@`0 daf)
508+ ?: =(`@`0 daf)
420− [p=p.tub q=[~ u=[p=fad q=tub]]]
509+ [p=p.tub q=[~ u=[p=fad q=tub]]]
421− ?: |(?=($~ q.tub) !=((end 3 1 daf) i.q.tub))
510+ ?: |(?=(~ q.tub) !=((end 3 daf) i.q.tub))
422− (fail tub)
511+ (fail tub)
423− $(p.tub (lust i.q.tub p.tub), q.tub t.q.tub, daf (rsh 3 1 daf))
512+ $(p.tub (lust i.q.tub p.tub), q.tub t.q.tub, daf (rsh 3 daf))
424− ::
425```
513```
426
514
427#### Examples
515#### Examples
428
516
429```
517```
430− > ((jest 'abc') [[1 1] "abc"])
518+> ((jest 'abc') [[1 1] "abc"])
431− [p=[p=1 q=4] q=[~ [p='abc' q=[p=[p=1 q=4] q=""]]]]
519+[p=[p=1 q=4] q=[~ [p='abc' q=[p=[p=1 q=4] q=""]]]]
432
520
433− > (scan "abc" (jest 'abc'))
521+> (scan "abc" (jest 'abc'))
434− 'abc'
522+'abc'
435
523
436− > (scan "abc" (jest 'acb'))
524+> (scan "abc" (jest 'acb'))
437− ! {1 2}
525+! {1 2}
438− ! 'syntax-error'
526+! 'syntax-error'
439− ! exit
527+! exit
440
528
441− > ((jest 'john doe') [[1 1] "john smith"])
529+> ((jest 'john doe') [[1 1] "john smith"])
442− [p=[p=1 q=6] q=~]
530+[p=[p=1 q=6] q=~]
443
531
444− > ((jest 'john doe') [[1 1] "john doe"])
532+> ((jest 'john doe') [[1 1] "john doe"])
445− [p=[p=1 q=9] q=[~ [p='john doe' q=[p=[p=1 q=9] q=""]]]]
533+[p=[p=1 q=9] q=[~ [p='john doe' q=[p=[p=1 q=9] q=""]]]]
446```
534```
447
535
448---
536---
@@ -455,45 +543,44 @@ Match and consume a single character.
455
543
456#### Accepts
544#### Accepts
457
545
458−`daf` is a `++char`
546+`daf` is a `char`
459
547
460#### Produces
548#### Produces
461
549
462−A `++rule`.
550+A `rule`.
463
551
464#### Source
552#### Source
465
553
466```hoon
554```hoon
467− ++ just :: XX redundant, jest
555+++ just
468− ~/ %just :: match a char
556+ ~/ %just
469− |= daf/char
557+ |= daf=char
470− ~/ %fun
558+ ~/ %fun
471− |= tub/nail
559+ |= tub=nail
472− ^- (like char)
560+ ^- (like char)
473− ?~ q.tub
561+ ?~ q.tub
474− (fail tub)
562+ (fail tub)
475− ?. =(daf i.q.tub)
563+ ?. =(daf i.q.tub)
476− (fail tub)
564+ (fail tub)
477− (next tub)
565+ (next tub)
478− ::
479```
566```
480
567
481#### Examples
568#### Examples
482
569
483```
570```
484− > ((just 'a') [[1 1] "abc"])
571+> ((just 'a') [[1 1] "abc"])
485− [p=[p=1 q=2] q=[~ [p=~~a q=[p=[p=1 q=2] q="bc"]]]]
572+[p=[p=1 q=2] q=[~ [p='a' q=[p=[p=1 q=2] q="bc"]]]]
486
573
487− > (scan "abc" (just 'a'))
574+> (scan "abc" (just 'a'))
488− ! {1 2}
575+! {1 2}
489− ! 'syntax-error'
576+! 'syntax-error'
490− ! exit
577+! exit
491
578
492− > (scan "a" (just 'a'))
579+> (scan "a" (just 'a'))
580+'a'
493
581
494− ~~a
495− > (scan "%" (just '%'))
582+> (scan "%" (just '%'))
496− ~~~25.
583+'%'
497```
584```
498
585
499---
586---
@@ -509,47 +596,49 @@ compiled.
509
596
510`gar` is a noun.
597`gar` is a noun.
511
598
512−`sef` is a gate that accepts a `++rule`
599+`sef` is a gate that accepts a `rule`
513
600
514#### Produces
601#### Produces
515
602
516−A `++rule`.
603+A `rule`.
517
604
518#### Source
605#### Source
519
606
520```hoon
607```hoon
521− ++ knee :: callbacks
608+++ knee
522− |* {gar/* sef/_|.(*rule)}
609+ =| [gar=* sef=_|.(*rule)]
610+ |@ ++ $
523− |= tub/nail
611+ |= tub=nail
524− ^- (like _gar)
612+ ^- (like _gar)
525− ((sef) tub)
613+ ((sef) tub)
526− ::
614+ --
527```
615```
528
616
529#### Examples
617#### Examples
530
618
531```
619```
532− > |-(;~(plug prn ;~(pose $ (easy ~))))
620+> |-(;~(plug prn ;~(pose $ (easy ~))))
533− ! rest-loop
621+! rest-loop
534− ! exit
622+! exit
535−
623+
536− > |-(;~(plug prn ;~(pose (knee *tape |.(^$)) (easy ~))))
624+> |-(;~(plug prn ;~(pose (knee *tape |.(^$)) (easy ~))))
537− < 1.obo
625+< 1.obo
538− [ c=c=tub=[p=[p=@ud q=@ud] q=""]
626+ [ c=c=tub=[p=[p=@ud q=@ud] q=""]
539− b
627+ b
540− < 1.bes
628+ < 1.bes
541− [ c=tub=[p=[p=@ud q=@ud] q=""]
629+ [ c=tub=[p=[p=@ud q=@ud] q=""]
542− b=<1.tnv [tub=[p=[p=@ud q=@ud] q=""] <1.ktu [daf=@tD <414.fvk 101.jzo 1.ypj %164>]>]>
630+ b=<1.tnv [tub=[p=[p=@ud q=@ud] q=""] <1.ktu [daf=@tD <414.fvk 101.jzo 1.ypj %164>]>]>
543− a=<1.fvg [tub=[p=[p=@ud q=@ud] q=""] <1.khu [[les=@ mos=@] <414.fvk 101.jzo 1.ypj %164>]>]>
631+ a=<1.fvg [tub=[p=[p=@ud q=@ud] q=""] <1.khu [[les=@ mos=@] <414.fvk 101.jzo 1.ypj %164>]>]>
544− v=<414.fvk 101.jzo 1.ypj %164>
632+ v=<414.fvk 101.jzo 1.ypj %164>
545− ]
546− >
547− a
548− ... 450 lines omitted ...
549 ]
633 ]
550 >
634 >
635+ a
636+ ... 450 lines omitted ...
637+ ]
638+>
639+
551− > (scan "abcd" |-(;~(plug prn ;~(pose (knee *tape |.(^$)) (easy ~)))))
640+> (scan "abcd" |-(;~(plug prn ;~(pose (knee *tape |.(^$)) (easy ~)))))
552− [~~a "bcd"]
641+['a' "bcd"]
553```
642```
554
643
555---
644---
@@ -558,48 +647,46 @@ A `++rule`.
558
647
559Match char
648Match char
560
649
561−Parser generator. Matches the next character if it is in a list of
650+Parser generator. Matches the next character if it is in a list of characters.
562−characters.
563
651
564#### Accepts
652#### Accepts
565
653
566−`bud` is a list of `++char`
654+`bud` is a list of `char`
567
655
568#### Produces
656#### Produces
569
657
570−A `++rule`.
658+A `rule`.
571
659
572#### Source
660#### Source
573
661
574```hoon
662```hoon
575− ++ mask :: match char in set
663+++ mask
576− ~/ %mask
664+ ~/ %mask
577− |= bud/(list char)
665+ |= bud=(list char)
578− ~/ %fun
666+ ~/ %fun
579− |= tub/nail
667+ |= tub=nail
580− ^- (like char)
668+ ^- (like char)
581− ?~ q.tub
669+ ?~ q.tub
582− (fail tub)
670+ (fail tub)
583− ?. (lien bud |=(a/char =(i.q.tub a)))
671+ ?. (lien bud |=(a=char =(i.q.tub a)))
584− (fail tub)
672+ (fail tub)
585− (next tub)
673+ (next tub)
586− ::
587```
674```
588
675
589#### Examples
676#### Examples
590
677
591```
678```
592− > (scan "a" (mask "cba"))
679+> (scan "a" (mask "cba"))
593− ~~a
680+'a'
594
681
595− > ((mask "abc") [[1 1] "abc"])
682+> ((mask "abc") [[1 1] "abc"])
596− [p=[p=1 q=2] q=[~ [p=~~a q=[p=[p=1 q=2] q="bc"]]]]
683+[p=[p=1 q=2] q=[~ [p='a' q=[p=[p=1 q=2] q="bc"]]]]
597
684
598− > ((mask "abc") [[1 1] "bbc"])
685+> ((mask "abc") [[1 1] "bbc"])
599− [p=[p=1 q=2] q=[~ [p=~~b q=[p=[p=1 q=2] q="bc"]]]]
686+[p=[p=1 q=2] q=[~ [p='b' q=[p=[p=1 q=2] q="bc"]]]]
600
687
601− > ((mask "abc") [[1 1] "dbc"])
688+> ((mask "abc") [[1 1] "dbc"])
602− [p=[p=1 q=1] q=~]
689+[p=[p=1 q=1] q=~]
603```
690```
604
691
605---
692---
@@ -608,38 +695,37 @@ A `++rule`.
608
695
609Parse list with delimiter
696Parse list with delimiter
610
697
611−Parser modifier: Parse a list of matches using a delimiter `++rule`.
698+Parser modifier: Parse a list of matches using a delimiter `rule`.
612
699
613#### Accepts
700#### Accepts
614
701
615−`bus` is a `++rule`.
702+`bus` is a `rule`.
616
703
617−`fel` is a `++rule`.
704+`fel` is a `rule`.
618
705
619#### Produces
706#### Produces
620
707
621−A `++rule`.
708+A `rule`.
622
709
623#### Source
710#### Source
624
711
625```hoon
712```hoon
626− ++ more
713+++ more
627− |* {bus/rule fel/rule}
714+ |* [bus=rule fel=rule]
628− ;~(pose (most bus fel) (easy ~))
715+ ;~(pose (most bus fel) (easy ~))
629− ::
630```
716```
631
717
632#### Examples
718#### Examples
633
719
634```
720```
635− > (scan "" (more ace dem))
721+> (scan "" (more ace dem))
636− ~
722+~
637
723
638− > (scan "40 20" (more ace dem))
724+> (scan "40 20" (more ace dem))
639− [q=40 ~[q=20]]
725+[40 [i=20 t=~]]
640
726
641− > (scan "40 20 60 1 5" (more ace dem))
727+> (scan "40 20 60 1 5" (more ace dem))
642− [q=40 ~[q=20 q=60 q=1 q=5]]
728+[40 [i=20 t=~[60 1 5]]]
643```
729```
644
730
645---
731---
@@ -648,39 +734,38 @@ A `++rule`.
648
734
649Parse list of at least one match
735Parse list of at least one match
650
736
651−Parser modifier: parse a `++list` of at least one match using a delimiter `++rule`.
737+Parser modifier: parse a `list` of at least one match using a delimiter `rule`.
652
738
653#### Accepts
739#### Accepts
654
740
655−`bus` is a `++rule`.
741+`bus` is a `rule`.
656
742
657−`fel` is a `++rule`.
743+`fel` is a `rule`.
658
744
659#### Produces
745#### Produces
660
746
661−A `++rule`.
747+A `rule`.
662
748
663#### Source
749#### Source
664
750
665```hoon
751```hoon
666− ++ most
752+++ most
667− |* {bus/rule fel/rule}
753+ |* [bus=rule fel=rule]
668− ;~(plug fel (star ;~(pfix bus fel)))
754+ ;~(plug fel (star ;~(pfix bus fel)))
669− ::
670```
755```
671
756
672#### Examples
757#### Examples
673
758
674```
759```
675− > (scan "40 20" (most ace dem))
760+> (scan "40 20" (most ace dem))
676− [q=40 ~[q=20]]
761+[40 [i=20 t=~]]
677
762
678− > (scan "40 20 60 1 5" (most ace dem))
763+> (scan "40 20 60 1 5" (most ace dem))
679− [q=40 ~[q=20 q=60 q=1 q=5]]
764+[40 [i=20 t=~[60 1 5]]]
680
765
681− > (scan "" (most ace dem))
766+> (scan "" (most ace dem))
682− ! {1 1}
767+! {1 1}
683− ! exit
768+! exit
684```
769```
685
770
686---
771---
@@ -693,33 +778,76 @@ Consume any character, producing it as a result.
693
778
694#### Accepts
779#### Accepts
695
780
696−`tub` is a `++nail`
781+`tub` is a `nail`
697
782
698#### Produces
783#### Produces
699
784
700−An `++edge`.
785+An `edge`.
701
786
702#### Source
787#### Source
703
788
704```hoon
789```hoon
705− ++ next :: consume a char
790+++ next
706− |= tub/nail
791+ |= tub=nail
707− ^- (like char)
792+ ^- (like char)
708− ?~ q.tub
793+ ?~ q.tub
709− (fail tub)
794+ (fail tub)
710− =+ zac=(lust i.q.tub p.tub)
795+ =+ zac=(lust i.q.tub p.tub)
711− [zac [~ i.q.tub [zac t.q.tub]]]
796+ [zac [~ i.q.tub [zac t.q.tub]]]
712− ::
713```
797```
714
798
715#### Examples
799#### Examples
716
800
717```
801```
718− > (next [[1 1] "ebc"])
802+> (next [[1 1] "ebc"])
719− [p=[p=1 q=2] q=[~ [p=~~e q=[p=[p=1 q=2] q="bc"]]]]
803+[p=[p=1 q=2] q=[~ [p='e' q=[p=[p=1 q=2] q="bc"]]]]
720
804
721− > (next [[1 1] "john jumps jones"])
805+> (next [[1 1] "john jumps jones"])
722− [p=[p=1 q=2] q=[~ [p=~~j q=[p=[p=1 q=2] q="ohn jumps jones"]]]]
806+[p=[p=1 q=2] q=[~ [p='j' q=[p=[p=1 q=2] q="ohn jumps jones"]]]]
807+```
808+
809+---
810+
811+## `++perk`
812+
813+Parse cube fork
814+
815+Given `a`, a list of `@tas`, match any one in the list and produce it. Note the
816+list should not be a `list` type, but just a null-terminated cell like `~[%foo %bar %baz]`. The type produced will be a union of the items in the given list,
817+so you can use a `?-` expression on the output.
818+
819+#### Accepts
820+
821+`a` is a `(pole @tas)`.
822+
823+#### Produces
824+
825+A `rule`.
826+
827+#### Source
828+
829+```hoon
830+++ perk
831+ |* a=(pole @tas)
832+ ?~ a fail
833+ ;~ pose
834+ (cold -.a (jest -.a))
835+ $(a +.a)
836+ ==
837+```
838+
839+#### Examples
840+
841+```
842+> (scan "foo" (perk ~[%foo %bar]))
843+%foo
844+
845+> (scan "bar" (perk ~[%foo %bar]))
846+%bar
847+
848+> (scan "baz" (perk ~[%foo %bar]))
849+{1 3}
850+syntax error
723```
851```
724
852
725---
853---
@@ -728,79 +856,112 @@ An `++edge`.
728
856
729List of at least one match.
857List of at least one match.
730
858
731−Parser modifier: parse `++list` of at least one match.
859+Parser modifier: parse `list` of at least one match.
732
860
733#### Accepts
861#### Accepts
734
862
735−`fel` is a `++rule`.
863+`fel` is a `rule`.
736
864
737#### Produces
865#### Produces
738
866
739−A `++rule`.
867+A `rule`.
740
868
741#### Source
869#### Source
742
870
743```hoon
871```hoon
744− ++ plus |*(fel/rule ;~(plug fel (star fel)))
872+++ plus |*(fel=rule ;~(plug fel (star fel))) ::
745```
873```
746
874
747#### Examples
875#### Examples
748
876
749```
877```
750− > (scan ">>>>" (cook lent (plus gar)))
878+> (scan ">>>>" (cook lent (plus gar)))
751− 4
879+4
752
880
753− > (scan "- - " (plus ;~(pose ace hep)))
881+> (scan "- - " (plus ;~(pose ace hep)))
754− [~~- " - "]
882+['-' [i=' ' t=~[' ' '-' ' ']]]
755
883
756− > `tape`(scan "- - " (plus ;~(pose ace hep)))
884+> `tape`(scan "- - " (plus ;~(pose ace hep)))
757− "- - "
885+"- - "
758
886
759− > `(pole ,@t)`(scan "- - " (plus ;~(pose ace hep)))
887+> `(pole ,@t)`(scan "- - " (plus ;~(pose ace hep)))
760− ['-' [' ' [' ' ['-' [' ' ~]]]]]
888+['-' [' ' [' ' ['-' [' ' ~]]]]]
889+```
890+
891+---
892+
893+## `++punt`
894+
895+Unitized parse
896+
897+Either successfully apply `rule` `a` and produce a `unit` of the result, or produce `~`.
898+
899+#### Accepts
900+
901+`a` is a `rule`.
902+
903+#### Produces
904+
905+A `rule`.
906+
907+#### Source
908+
909+```hoon
910+++ punt |*([a=rule] ;~(pose (stag ~ a) (easy ~)))
911+```
912+
913+#### Example
914+
915+```
916+> ((punt (jest 'foo')) 1^1 "foo")
917+[p=[p=1 q=4] q=[~ u=[p=[~ 'foo'] q=[p=[p=1 q=4] q=~]]]]
918+
919+> ((punt (jest 'foo')) 1^1 "bar")
920+[p=[p=1 q=1] q=[~ [p=~ q=[p=[p=1 q=1] q="bar"]]]]
761```
921```
762
922
763---
923---
764
924
765## `++sear`
925## `++sear`
766
926
767−Conditional `++cook`
927+Conditional `cook`
768
928
769−Conditional `++cook`. Slams the result through a gate that produces
929+Conditional `cook`. Slams the result through a gate that produces
770a unit; if that unit is empty, fail.
930a unit; if that unit is empty, fail.
771
931
772#### Accepts
932#### Accepts
773
933
774−`tub` is a `++nail`.
934+`pyq` is a gate that produces a `unit`.
935+
936+`sef` is a `rule`.
775
937
776#### Produces
938#### Produces
777
939
778−A `++rule`.
940+A `rule`.
779
941
780#### Source
942#### Source
781
943
782```hoon
944```hoon
783− ++ sear :: conditional cook
945+++ sear
784− |* {pyq/$-(* (unit)) sef/rule}
946+ |* [pyq=$-(* (unit)) sef=rule]
785− |= tub/nail
947+ |= tub=nail
786− =+ vex=(sef tub)
948+ =+ vex=(sef tub)
787− ?~ q.vex
949+ ?~ q.vex
788− vex
950+ vex
789− =+ gey=(pyq p.u.q.vex)
951+ =+ gey=(pyq p.u.q.vex)
790− ?~ gey
952+ ?~ gey
791− [p=p.vex q=~]
953+ [p=p.vex q=~]
792− [p=p.vex q=[~ u=[p=u.gey q=q.u.q.vex]]]
954+ [p=p.vex q=[~ u=[p=u.gey q=q.u.q.vex]]]
793− ::
794```
955```
795
956
796#### Examples
957#### Examples
797
958
798```
959```
799− > ((sear |=(a/* ?@(a (some a) ~)) (just `a`)) [[1 1] "abc"])
960+> ((sear |=(a=* ?@(a (some a) ~)) (just 'a')) [[1 1] "abc"])
800− [p=[p=1 q=2] q=[~ u=[p=97 q=[p=[p=1 q=2] q="bc"]]]]
961+[p=[p=1 q=2] q=[~ u=[p=97 q=[p=[p=1 q=2] q="bc"]]]]
801
962
802− > ((sear |=(* ~) (just 'a')) [[1 1] "abc"])
963+> ((sear |=(* ~) (just 'a')) [[1 1] "abc"])
803− [p=[p=1 q=2] q=~]
964+[p=[p=1 q=2] q=~]
804```
965```
805
966
806---
967---
@@ -809,7 +970,7 @@ A `++rule`.
809
970
810Char in range
971Char in range
811
972
812−Match characters (`++char`) within a range.
973+Match characters (`char`) within a range.
813
974
814#### Accepts
975#### Accepts
815
976
@@ -819,75 +980,73 @@ Match characters (`++char`) within a range.
819
980
820#### Produces
981#### Produces
821
982
822−A `++rule`.
983+A `rule`.
823
984
824#### Source
985#### Source
825
986
826```hoon
987```hoon
827− ++ shim :: match char in range
988+++ shim
828− ~/ %shim
989+ ~/ %shim
829− |= {les/@ mos/@}
990+ |= [les=@ mos=@]
830− ~/ %fun
991+ ~/ %fun
831− |= tub/nail
992+ |= tub=nail
832− ^- (like char)
993+ ^- (like char)
833− ?~ q.tub
994+ ?~ q.tub
834− (fail tub)
995+ (fail tub)
835− ?. ?&((gte i.q.tub les) (lte i.q.tub mos))
996+ ?. ?&((gte i.q.tub les) (lte i.q.tub mos))
836− (fail tub)
997+ (fail tub)
837− (next tub)
998+ (next tub)
838− ::
839```
999```
840
1000
841#### Examples
1001#### Examples
842
1002
843```
1003```
844− > ((shim 'a' 'z') [[1 1] "abc"])
1004+> `tape`(rash 'abc' (plus (shim 'a' 'z')))
845− [p=[p=1 q=2] q=[~ [p=~~a q=[p=[p=1 q=2] q="bc"]]]]
1005+"abc"
846
1006
847− > ((shim 'a' 'Z') [[1 1] "abc"])
1007+> `tape`(rash 'ABC' (plus (shim 'a' 'z')))
848− [p=[p=1 q=1] q=~]
1008+{1 1}
849−
1009+syntax error
850− > ((shim 'a' 'Z') [[1 1] "Abc"])
851− [p=[p=1 q=2] q=[~ [p=~~~41. q=[p=[p=1 q=2] q="bc"]]]]
852```
1010```
853
1011
854---
1012---
855
1013
856−## `++slug` {#slug}
1014+## `++slug`
857
1015
858Use gate to parse delimited list
1016Use gate to parse delimited list
859
1017
860−Parser modifier: By composing with a gate, parse a delimited `++list` of
1018+Parser modifier: By composing with a gate, parse a delimited `list` of
861matches.
1019matches.
862
1020
863#### Accepts
1021#### Accepts
864
1022
1023+`raq` is a binary gate.
1024+
865−`bus` is a `++rule`.
1025+`bus` is a `rule`.
866
1026
867−`fel` is a `++rule`.
1027+`fel` is a `rule`.
868
1028
869#### Produces
1029#### Produces
870
1030
871−A `++rule`.
1031+A `rule`.
872
1032
873#### Source
1033#### Source
874
1034
875```hoon
1035```hoon
876− ++ slug
1036+++ slug
877− |* raq/_|*({a/* b/*} [a b])
1037+ |* raq=_=>(~ |*([a=* b=*] [a b]))
878− |* {bus/rule fel/rule}
1038+ |* [bus=rule fel=rule]
879− ;~((comp raq) fel (stir +<+.raq raq ;~(pfix bus fel)))
1039+ ;~((comp raq) fel (stir +<+.raq raq ;~(pfix bus fel)))
880− ::
881```
1040```
882
1041
883#### Examples
1042#### Examples
884
1043
885```
1044```
886− > (scan "20+5+110" ((slug add) lus dem))
1045+> (scan "20+5+110" ((slug add) lus dem))
887− 135
1046+135
888
1047
889− > `@t`(scan "a b c" ((slug |=(a/[@ @t] (cat 3 a))) ace alp))
1048+> `@t`(scan "a b c" ((slug |=(a=[@t @t] (cat 3 a))) ace alp))
890− 'abc'
1049+'abc'
891```
1050```
892
1051
893---
1052---
@@ -896,7 +1055,7 @@ A `++rule`.
896
1055
897Add label
1056Add label
898
1057
899−Add a label to an edge parsed by a rule.
1058+Add a label to an `edge` parsed by a `rule`.
900
1059
901#### Accepts
1060#### Accepts
902
1061
@@ -906,34 +1065,27 @@ Add a label to an edge parsed by a rule.
906
1065
907#### Produces
1066#### Produces
908
1067
909−A `++rule`.
1068+A `rule`.
910
1069
911#### Source
1070#### Source
912
1071
913```hoon
1072```hoon
914− ++ stag :: add a label
1073+++ stag
915− ~/ %stag
1074+ ~/ %stag
916− |* {gob/* sef/rule}
1075+ |* [gob=* sef=rule]
917− ~/ %fun
1076+ ~/ %fun
918− |= tub/nail
1077+ |= tub=nail
919− =+ vex=(sef tub)
1078+ =+ vex=(sef tub)
920− ?~ q.vex
1079+ ?~ q.vex
921− vex
1080+ vex
922− [p=p.vex q=[~ u=[p=[gob p.u.q.vex] q=q.u.q.vex]]]
1081+ [p=p.vex q=[~ u=[p=[gob p.u.q.vex] q=q.u.q.vex]]]
923− ::
924```
1082```
925
1083
926#### Examples
1084#### Examples
927
1085
928```
1086```
929− > ((stag %foo (just 'a')) [[1 1] "abc"])
1087+> (rash 'abc' (stag %foo (jest 'abc')))
930− [p=[p=1 q=2] q=[~ u=[p=[%foo ~~a] q=[p=[p=1 q=2] q="bc"]]]]
1088+[%foo 'abc']
931−
932− > ((stag "xyz" (jest 'abc')) [[1 1] "abc"])
933− [p=[p=1 q=4] q=[~ u=[p=["xyz" 'abc'] q=[p=[p=1 q=4] q=""]]]]
934−
935− > ((stag 10.000 (shim 0 100)) [[1 1] "abc"])
936− [p=[p=1 q=2] q=[~ u=[p=[10.000 ~~a] q=[p=[p=1 q=2] q="bc"]]]]
937```
1089```
938
1090
939---
1091---
@@ -942,41 +1094,45 @@ A `++rule`.
942
1094
943List of matches
1095List of matches
944
1096
945−Parser modifier: parse `++list` of matches.
1097+Parser modifier: parse `list` of matches.
946
1098
947#### Accepts
1099#### Accepts
948
1100
949−`fel` is a `++rule`.
1101+`fel` is a `rule`.
950
1102
951#### Produces
1103#### Produces
952
1104
1105+A `rule`.
1106+
1107+#### Source
1108+
953```hoon
1109```hoon
954− ++ star :: 0 or more times
1110+++ star
955− |* fel/rule
1111+ |* fel=rule
956− (stir `(list _(wonk *fel))`~ |*({a/* b/*} [a b]) fel)
1112+ (stir `(list _(wonk *fel))`~ |*([a=* b=*] [a b]) fel)
957```
1113```
958
1114
959#### Examples
1115#### Examples
960
1116
961```
1117```
962− > (scan "aaaaa" (just 'a'))
1118+> (scan "aaaaa" (just 'a'))
963− ! {1 2}
1119+! {1 2}
964− ! 'syntax-error'
1120+! 'syntax-error'
965− ! exit
1121+! exit
966
1122
967− > (scan "aaaaa" (star (just 'a')))
1123+> (scan "aaaaa" (star (just 'a')))
968− "aaaaa"
1124+"aaaaa"
969
1125
970− > (scan "abcdef" (star (just 'a')))
1126+> (scan "abcdef" (star (just 'a')))
971− ! {1 2}
1127+! {1 2}
972− ! 'syntax-error'
1128+! 'syntax-error'
973− ! exit
1129+! exit
974
1130
975− > (scan "abcabc" (star (jest 'abc')))
1131+> (scan "abcabc" (star (jest 'abc')))
976− <|abc abc|>
1132+<|abc abc|>
977
1133
978− > (scan "john smith" (star (shim 0 200)))
1134+> (scan "john smith" (star (shim 0 200)))
979− "john smith"
1135+"john smith"
980```
1136```
981
1137
982---
1138---
@@ -985,7 +1141,8 @@ Parser modifier: parse `++list` of matches.
985
1141
986Add faces
1142Add faces
987
1143
988−Add faces `[p q]` to range-parser pairs in a list.
1144+Add faces `[p q]` to range-parser pairs in a list. Typically used in combination
1145+with [`++stew`](#stew).
989
1146
990#### Accepts
1147#### Accepts
991
1148
@@ -993,97 +1150,114 @@ Add faces `[p q]` to range-parser pairs in a list.
993
1150
994#### Produces
1151#### Produces
995
1152
1153+A `(list [p=?(@ [@ @]) q=rule])`.
1154+
996#### Source
1155#### Source
997
1156
998```hoon
1157```hoon
999− ++ stet
1158+++ stet
1000− |* leh/(list {?(@ {@ @}) rule})
1159+ |* leh=(list [?(@ [@ @]) rule])
1001− |-
1160+ |-
1002− ?~ leh
1161+ ?~ leh
1003− ~
1162+ ~
1004− [i=[p=-.i.leh q=+.i.leh] t=$(leh t.leh)]
1163+ [i=[p=-.i.leh q=+.i.leh] t=$(leh t.leh)]
1005− ::
1006```
1164```
1007
1165
1008#### Examples
1166#### Examples
1009
1167
1010```
1168```
1011− > (stet (limo [[5 (just 'a')] [1 (jest 'abc')] [[1 1] (shim 0 200)]
1169+> =rule %- stew
1012− [[1 10] (cold %foo (just 'a'))]~]))
1170+ %- stet
1013− ~[
1171+ %- limo
1014− [p=5 q=<1.lrk [tub=[p=[p=@ud q=@ud] q=""] <1.nqy [daf=@tD <394.imz 97.kdz 1.xlc %164>]>]>]
1172+ :~
1015− [p=1 q=<1.lrk [tub=[p=[p=@ud q=@ud] q=""] <1.nqy [daf=@tD <394.imz 97.kdz 1.xlc %164>]>]>]
1173+ [['a' 'z'] (cook |=(a=@ (sub a 32)) alp)]
1016− [p=[1 1] q=<1.lrk [tub=[p=[p=@ud q=@ud] q=""] <1.nqy [daf=@tD <394.imz 97.kdz 1.xlc %164>]>]>]
1174+ [['A' 'Z'] (cook |=(a=@ (add a 32)) alp)]
1017− [p=[1 10] q=<1.lrk [tub=[p=[p=@ud q=@ud] q=""] <1.nqy [daf=@tD <394.imz 97.kdz 1.xlc %164>]>]>]
1175+ ==
1018− ]
1176+
1019− > [[[1 1] (just 'a')] [[2 1] (shim 0 200)] ~]
1177+> `tape`(rash 'fooBARbaz' (star rule))
1020− [ [[1 1] <1.tnv [tub=[p=[p=@ud q=@ud] q=""] <1.ktu [daf=@tD <414.fvk 101.jzo 1.ypj %164>]>]>]
1178+"FOObarBAZ"
1021− [[2 1] <1.fvg [tub=[p=[p=@ud q=@ud] q=""] <1.khu [[les=@ mos=@] <414.fvk 101.jzo 1.ypj %164>]>]>]
1022− ~
1023− ]
1024− > (stet (limo [[[1 1] (just 'a')] [[2 1] (shim 0 200)] ~]))
1025− ~[
1026− [p=[1 1] q=<1.lrk [tub=[p=[p=@ud q=@ud] q=""] <1.nqy [daf=@tD <394.imz 97.kdz 1.xlc %164>]>]>]
1027− [p=[2 1] q=<1.lrk [tub=[p=[p=@ud q=@ud] q=""] <1.nqy [daf=@tD <394.imz 97.kdz 1.xlc %164>]>]>]
1028− ]
1029```
1179```
1030
1180
1031---
1181---
1032
1182
1033## `++stew`
1183## `++stew`
1034
1184
1035−Switch by first
1185+Switch by first char
1186+
1187+Parser generator. From an associative `list` of characters or character
1188+ranges to `rule`s, construct a `map`, and parse `tape`s only
1189+with `rule`s associated with a range that the `tape`'s first character falls in.
1190+
1191+#### Accepts
1192+
1193+`leh` is a `(list [p=?(@ [@ @]) q=rule])`, where `p` is a `char` or `char` range.
1194+
1195+#### Produces
1196+
1197+A `rule`.
1198+
1199+#### Source
1036
1200
1037```hoon
1201```hoon
1038− ++ stew :: switch by first char
1202+++ stew :: switch by first char
1039− ~/ %stew
1203+ ~/ %stew
1040− |* leh/(list {p/?(@ {@ @}) q/rule}) :: char+range keys
1204+ |* leh=(list [p=?(@ [@ @]) q=rule]) :: char+range keys
1041− =+ ^= wor :: range complete lth
1205+ =+ ^= wor :: range complete lth
1042− |= {ort/?(@ {@ @}) wan/?(@ {@ @})}
1206+ |= [ort=?(@ [@ @]) wan=?(@ [@ @])]
1043− ?@ ort
1207+ ?@ ort
1044− ?@(wan (lth ort wan) (lth ort -.wan))
1208+ ?@(wan (lth ort wan) (lth ort -.wan))
1045− ?@(wan (lth +.ort wan) (lth +.ort -.wan))
1209+ ?@(wan (lth +.ort wan) (lth +.ort -.wan))
1046− =+ ^= hel :: build parser map
1210+ =+ ^= hel :: build parser map
1047− =+ hel=`(tree _?>(?=(^ leh) i.leh))`~
1211+ =+ hel=`(tree _?>(?=(^ leh) i.leh))`~
1048− |- ^+ hel
1212+ |- ^+ hel
1049− ?~ leh
1213+ ?~ leh
1050− ~
1214+ ~
1051− =+ yal=$(leh t.leh)
1215+ =+ yal=$(leh t.leh)
1052− |- ^+ hel
1216+ |- ^+ hel
1053− ?~ yal
1217+ ?~ yal
1054− [i.leh ~ ~]
1218+ [i.leh ~ ~]
1055− ?: (wor p.i.leh p.n.yal)
1219+ ?: (wor p.i.leh p.n.yal)
1056− =+ nuc=$(yal l.yal)
1220+ =+ nuc=$(yal l.yal)
1057− ?> ?=(^ nuc)
1221+ ?> ?=(^ nuc)
1058− ?: (vor p.n.yal p.n.nuc)
1222+ ?: (mor p.n.yal p.n.nuc)
1059− [n.yal nuc r.yal]
1223+ [n.yal nuc r.yal]
1060− [n.nuc l.nuc [n.yal r.nuc r.yal]]
1224+ [n.nuc l.nuc [n.yal r.nuc r.yal]]
1061− =+ nuc=$(yal r.yal)
1225+ =+ nuc=$(yal r.yal)
1062− ?> ?=(^ nuc)
1226+ ?> ?=(^ nuc)
1063− ?: (vor p.n.yal p.n.nuc)
1227+ ?: (mor p.n.yal p.n.nuc)
1064− [n.yal l.yal nuc]
1228+ [n.yal l.yal nuc]
1065− [n.nuc [n.yal l.yal l.nuc] r.nuc]
1229+ [n.nuc [n.yal l.yal l.nuc] r.nuc]
1066− ~% %fun ..^$ ~
1230+ ~% %fun ..^$ ~
1067− |= tub/nail
1231+ |= tub=nail
1068− ?~ q.tub
1232+ ?~ q.tub
1069− (fail tub)
1233+ (fail tub)
1070− |-
1234+ |-
1071− ?~ hel
1235+ ?~ hel
1072− (fail tub)
1236+ (fail tub)
1073− ?: ?@ p.n.hel
1237+ ?: ?@ p.n.hel
1074− =(p.n.hel i.q.tub)
1238+ =(p.n.hel i.q.tub)
1075− ?&((gte i.q.tub -.p.n.hel) (lte i.q.tub +.p.n.hel))
1239+ ?&((gte i.q.tub -.p.n.hel) (lte i.q.tub +.p.n.hel))
1076− :: (q.n.hel [(lust i.q.tub p.tub) t.q.tub])
1240+ :: (q.n.hel [(lust i.q.tub p.tub) t.q.tub])
1077− (q.n.hel tub)
1241+ (q.n.hel tub)
1078− ?: (wor i.q.tub p.n.hel)
1242+ ?: (wor i.q.tub p.n.hel)
1079− $(hel l.hel)
1243+ $(hel l.hel)
1080− $(hel r.hel)
1244+ $(hel r.hel)
1081− ::
1082−```
1245+```
1083−
1246+
1084−Parser generator. From an associative `++list` of characters or character
1247+#### Examples
1085−ranges to `++rule`s, construct a `++map`, and parse `++tape`s only
1248+
1086−with `++rules` associated with a range that the `++tape`'s first character falls in.
1249+```
1250+> =rule %- stew
1251+ %- stet
1252+ %- limo
1253+ :~
1254+ [['a' 'z'] (cook |=(a=@ (sub a 32)) alp)]
1255+ [['A' 'Z'] (cook |=(a=@ (add a 32)) alp)]
1256+ ==
1257+
1258+> `tape`(rash 'fooBARbaz' (star rule))
1259+"FOObarBAZ"
1260+```
1087
1261
1088---
1262---
1089
1263
@@ -1091,7 +1265,7 @@ with `++rules` associated with a range that the `++tape`'s first character falls
1091
1265
1092Parse repeatedly
1266Parse repeatedly
1093
1267
1094−Parse with `++rule` as many times as possible, and fold over results with a
1268+Parse with `rule` as many times as possible, and fold over results with a
1095binary gate.
1269binary gate.
1096
1270
1097#### Accepts
1271#### Accepts
@@ -1100,37 +1274,51 @@ binary gate.
1100
1274
1101`raq` is a gate that takes two nouns and produces a cell.
1275`raq` is a gate that takes two nouns and produces a cell.
1102
1276
1103−`fel` is a rule.
1277+`fel` is a `rule`.
1104
1278
1105#### Produces
1279#### Produces
1106
1280
1107−A rule.
1281+A `rule`.
1108
1282
1109#### Source
1283#### Source
1110
1284
1111```hoon
1285```hoon
1112− ++ stir
1286+++ stir
1113− ~/ %stir
1287+ ~/ %stir
1114− |* {rud/* raq/_=>(~ |*({a/* b/*} [a b])) fel/rule}
1288+ |* [rud=* raq=_=>(~ |*([a=* b=*] [a b])) fel=rule]
1115− ~/ %fun
1289+ ~/ %fun
1116− |= tub/nail
1290+ |= tub=nail
1117− ^- (like _rud)
1291+ ^- (like _rud)
1292+ ::
1293+ :: lef: successful interim parse results (per .fel)
1294+ :: wag: initial accumulator (.rud in .tub at farthest success)
1295+ ::
1296+ =+ ^= [lef wag]
1297+ =| lef=(list _(fel tub))
1298+ |- ^- [_lef (pair hair [~ u=(pair _rud nail)])]
1118− =+ vex=(fel tub)
1299+ =+ vex=(fel tub)
1119− ?~ q.vex
1300+ ?~ q.vex
1301+ :- lef
1120− [p.vex [~ rud tub]]
1302+ [p.vex [~ rud tub]]
1121− =+ wag=$(tub q.u.q.vex)
1303+ $(lef [vex lef], tub q.u.q.vex)
1122− ?> ?=(^ q.wag)
1304+ ::
1305+ :: fold .lef into .wag, combining results with .raq
1306+ ::
1307+ %+ roll lef
1308+ |= _[vex=(fel tub) wag=wag] :: q.vex is always (some)
1309+ ^+ wag
1310+ :- (last p.vex p.wag)
1123− [(last p.vex p.wag) [~ (raq p.u.q.vex p.u.q.wag) q.u.q.wag]]
1311+ [~ (raq p.u.+.q.vex p.u.q.wag) q.u.q.wag]
1124```
1312```
1125
1313
1126#### Examples
1314#### Examples
1127
1315
1128```
1316```
1129− > (scan "abc" (stir *@ add prn))
1317+> (scan "abc" (stir *@ add prn))
1130− 294
1318+294
1131
1319
1132− > (roll "abc" add)
1320+> (roll "abc" add)
1133− b=294
1321+294
1134```
1322```
1135
1323
1136---
1324---
@@ -1143,49 +1331,50 @@ Parse bounded number of times.
1143
1331
1144#### Accepts
1332#### Accepts
1145
1333
1146−`[les=@ mos=@]` is a cell of atoms indicating the bounds.
1334+`lig` is a cell of atoms (`[@ @]`) indicating the bounds.
1147
1335
1148−`fel` is a `++rule`.
1336+`fel` is a `rule`.
1149
1337
1150#### Produces
1338#### Produces
1151
1339
1152−A `++rule`.
1340+A `rule`.
1153
1341
1154#### Source
1342#### Source
1155
1343
1156```hoon
1344```hoon
1157− ++ stun :: parse several times
1345+++ stun
1346+ ~/ %stun
1158− |* {lig/{@ @} fel/rule}
1347+ |* [lig=[@ @] fel=rule]
1159− |= tub/nail
1348+ |= tub=nail
1160− ^- (like (list _(wonk (fel))))
1349+ ^- (like (list _(wonk (fel))))
1161− ?: =(0 +.lig)
1350+ ?: =(0 +.lig)
1162− [p.tub [~ ~ tub]]
1351+ [p.tub [~ ~ tub]]
1163− =+ vex=(fel tub)
1352+ =+ vex=(fel tub)
1164− ?~ q.vex
1353+ ?~ q.vex
1165− ?: =(0 -.lig)
1354+ ?: =(0 -.lig)
1166− [p.vex [~ ~ tub]]
1355+ [p.vex [~ ~ tub]]
1167− vex
1356+ vex
1168− =+ ^= wag %= $
1357+ =+ ^= wag %= $
1169− -.lig ?:(=(0 -.lig) 0 (dec -.lig))
1358+ -.lig ?:(=(0 -.lig) 0 (dec -.lig))
1170− +.lig ?:(=(0 +.lig) 0 (dec +.lig))
1359+ +.lig ?:(=(0 +.lig) 0 (dec +.lig))
1171− tub q.u.q.vex
1360+ tub q.u.q.vex
1172− ==
1361+ ==
1173− ?~ q.wag
1362+ ?~ q.wag
1174− wag
1363+ wag
1175− [p.wag [~ [p.u.q.vex p.u.q.wag] q.u.q.wag]]
1364+ [p.wag [~ [p.u.q.vex p.u.q.wag] q.u.q.wag]]
1176```
1365```
1177
1366
1178#### Examples
1367#### Examples
1179
1368
1180```
1369```
1181− > ((stun [5 10] prn) [1 1] "aquickbrownfoxran")
1370+> ((stun [5 10] prn) [1 1] "aquickbrownfoxran")
1182− [p=[p=1 q=11] q=[~ [p="aquickbrow" q=[p=[p=1 q=11] q="nfoxran"]]]]
1371+[p=[p=1 q=11] q=[~ [p="aquickbrow" q=[p=[p=1 q=11] q="nfoxran"]]]]
1183
1372
1184− > ((stun [5 10] prn) [1 1] "aquickbro")
1373+> ((stun [5 10] prn) [1 1] "aquickbro")
1185− [p=[p=1 q=10] q=[~ [p="aquickbro" q=[p=[p=1 q=10] q=""]]]]
1374+[p=[p=1 q=10] q=[~ [p="aquickbro" q=[p=[p=1 q=10] q=""]]]]
1186
1375
1187− > ((stun [5 10] prn) [1 1] "aqui")
1376+> ((stun [5 10] prn) [1 1] "aqui")
1188− [p=[p=1 q=5] q=~]
1377+[p=[p=1 q=5] q=~]
1189```
1378```
1190
1379
1191---
1380---
content/docs/hoon/reference/stdlib/table-of-contents.md+12−15
@@ -141,7 +141,6 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
141<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#digin' title="Address of a in set"><code>++dig:in</code></a>
141<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#digin' title="Address of a in set"><code>++dig:in</code></a>
142<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#dimag' title="Parse decimal number"><code>++dim:ag</code></a>
142<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#dimag' title="Parse decimal number"><code>++dim:ag</code></a>
143<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#dime' title="Auraatom pair"><code>+$dime</code></a>
143<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#dime' title="Auraatom pair"><code>+$dime</code></a>
144−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#dinre' title="(Undocumented)"><code>++din:re</code></a>
145<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#dis' title="Binary AND (atoms)"><code>++dis</code></a>
144<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#dis' title="Binary AND (atoms)"><code>++dis</code></a>
146<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dit' title="Decimal digit"><code>++dit</code></a>
145<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dit' title="Decimal digit"><code>++dit</code></a>
147<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#div' title="Divide"><code>++div</code></a>
146<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#div' title="Divide"><code>++div</code></a>
@@ -213,7 +212,6 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
213<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#fenob' title="Reverse +fe"><code>++fen:ob</code></a>
212<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#fenob' title="Reverse +fe"><code>++fen:ob</code></a>
214<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#fil' title="Fill bloqstream"><code>++fil</code></a>
213<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#fil' title="Fill bloqstream"><code>++fil</code></a>
215<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#find' title="First index in list"><code>++find</code></a>
214<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#find' title="First index in list"><code>++find</code></a>
216−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#fitre' title="Fit on one line test"><code>++fit:re</code></a>
217<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#flag' title="Boolean (flag)"><code>+$flag</code></a>
215<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#flag' title="Boolean (flag)"><code>+$flag</code></a>
218<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#flifl' title="Flip sign"><code>++fli:fl</code></a>
216<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#flifl' title="Flip sign"><code>++fli:fl</code></a>
219<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#flit' title="Make filter"><code>++flit</code></a>
217<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#flit' title="Make filter"><code>++flit</code></a>
@@ -232,6 +230,7 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
232<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#frasi' title="Divide (signed integer)"><code>++fra:si</code></a>
230<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#frasi' title="Divide (signed integer)"><code>++fra:si</code></a>
233<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#full' title="Parse to end"><code>++full</code></a>
231<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#full' title="Parse to end"><code>++full</code></a>
234<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#funk' title="Add to tape"><code>++funk</code></a>
232<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#funk' title="Add to tape"><code>++funk</code></a>
233+<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#fuss' title="Has A or B?"><code>++fuss</code></a>
235<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#fyndob' title="Restore structure v3"><code>++fynd:ob</code></a>
234<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#fyndob' title="Restore structure v3"><code>++fynd:ob</code></a>
236
235
237### g
236### g
@@ -304,6 +303,7 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
304
303
305<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#iblfl' title="Integer binary logarithm"><code>++ibl:fl</code></a>
304<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#iblfl' title="Integer binary logarithm"><code>++ibl:fl</code></a>
306<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#ifix' title="Infix"><code>++ifix</code></a>
305<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#ifix' title="Infix"><code>++ifix</code></a>
306+<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#inde' title="Indentation block"><code>++inde</code></a>
307<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#indpo' title="Parse suffix"><code>++ind:po</code></a>
307<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#indpo' title="Parse suffix"><code>++ind:po</code></a>
308<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#inspo' title="Parse prefix"><code>++ins:po</code></a>
308<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#inspo' title="Parse prefix"><code>++ins:po</code></a>
309<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#intby' title="Intersection (map)"><code>++int:by</code></a>
309<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#intby' title="Intersection (map)"><code>++int:by</code></a>
@@ -468,6 +468,7 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
468<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#pel' title="Parse ( (pel)"><code>++pel</code></a>
468<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#pel' title="Parse ( (pel)"><code>++pel</code></a>
469<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#per' title="Parse ) (per)"><code>++per</code></a>
469<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#per' title="Parse ) (per)"><code>++per</code></a>
470<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#perdso' title="Parses dime/tiple without standard prefixes"><code>++perd:so</code></a>
470<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#perdso' title="Parses dime/tiple without standard prefixes"><code>++perd:so</code></a>
471+<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#perk' title="Parse cube fork"><code>++perk</code></a>
471<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pevab' title="Parse <=5 in base 32"><code>++pev:ab</code></a>
472<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pevab' title="Parse <=5 in base 32"><code>++pev:ab</code></a>
472<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pewab' title="Parse <= 5 in base 64"><code>++pew:ab</code></a>
473<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pewab' title="Parse <= 5 in base 64"><code>++pew:ab</code></a>
473<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#pfix' title="Discard first rule"><code>++pfix</code></a>
474<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#pfix' title="Discard first rule"><code>++pfix</code></a>
@@ -485,6 +486,7 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
485<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#prn' title="Parse any printable character"><code>++prn</code></a>
486<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#prn' title="Parse any printable character"><code>++prn</code></a>
486<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#profo' title="Multiplies b and c modulo a"><code>++pro:fo</code></a>
487<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#profo' title="Multiplies b and c modulo a"><code>++pro:fo</code></a>
487<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#prosi' title="Multiply to signed integer"><code>++pro:si</code></a>
488<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#prosi' title="Multiply to signed integer"><code>++pro:si</code></a>
489+<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#punt' title="Unitized parse"><code>++punt</code></a>
488<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#putby' title="Add keyvalue pair (map)"><code>++put:by</code></a>
490<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#putby' title="Add keyvalue pair (map)"><code>++put:by</code></a>
489<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#putin' title="Put b in a (set)"><code>++put:in</code></a>
491<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#putin' title="Put b in a (set)"><code>++put:in</code></a>
490<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#putju' title="Add keyset pair (jar)"><code>++put:ju</code></a>
492<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#putju' title="Add keyset pair (jar)"><code>++put:ju</code></a>
@@ -528,7 +530,6 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
528<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rev' title="Reverse"><code>++rev</code></a>
530<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rev' title="Reverse"><code>++rev</code></a>
529<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rfat' title="Print loobean"><code>++rf:at</code></a>
531<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rfat' title="Print loobean"><code>++rf:at</code></a>
530<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#ribby' title="Transform + product (map)"><code>++rib:by</code></a>
532<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#ribby' title="Transform + product (map)"><code>++rib:by</code></a>
531−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#rigre' title="Wrap tape in / (tank)"><code>++rig:re</code></a>
532<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rip' title="Disassemble"><code>++rip</code></a>
533<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rip' title="Disassemble"><code>++rip</code></a>
533<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rnat' title="Print null"><code>++rn:at</code></a>
534<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rnat' title="Print null"><code>++rn:at</code></a>
534<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rolfe' title="Roll left"><code>++rol:fe</code></a>
535<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rolfe' title="Roll left"><code>++rol:fe</code></a>
@@ -600,11 +601,9 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
600<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shax' title="SHA256"><code>++shax</code></a>
601<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shax' title="SHA256"><code>++shax</code></a>
601<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shay' title="SHA256 with length"><code>++shay</code></a>
602<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shay' title="SHA256 with length"><code>++shay</code></a>
602<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shaz' title="SHA512"><code>++shaz</code></a>
603<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shaz' title="SHA512"><code>++shaz</code></a>
603−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#shep' title="(Undocumented)"><code>++shep</code></a>
604<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#shffl' title="Shift power"><code>++shf:fl</code></a>
604<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#shffl' title="Shift power"><code>++shf:fl</code></a>
605<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#shim' title="Match character within range"><code>++shim</code></a>
605<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#shim' title="Match character within range"><code>++shim</code></a>
606−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#shop' title="(Undocumented)"><code>++shop</code></a>
606+<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#show' title="Pretty-printer (deprecated)"><code>++show</code></a>
607−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#show' title="(Undocumented)"><code>++show</code></a>
608<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#si' title="Signed integer"><code>++si</code></a>
607<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#si' title="Signed integer"><code>++si</code></a>
609<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#sinl' title="Construct set from nullterminated noun"><code>++si:nl</code></a>
608<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#sinl' title="Construct set from nullterminated noun"><code>++si:nl</code></a>
610<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sibab' title="Parse binary digit"><code>++sib:ab</code></a>
609<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sibab' title="Parse binary digit"><code>++sib:ab</code></a>
@@ -785,11 +784,11 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
785<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wack' title="Knot escape"><code>++wack</code></a>
784<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wack' title="Knot escape"><code>++wack</code></a>
786<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#wain' title="List of cords"><code>+$wain</code></a>
785<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#wain' title="List of cords"><code>+$wain</code></a>
787<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#wall' title="List of list of characters"><code>+$wall</code></a>
786<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#wall' title="List of list of characters"><code>+$wall</code></a>
787+<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#wash' title="Render tank at width"><code>++wash</code></a>
788<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#weld' title="Concatenate two lists"><code>++weld</code></a>
788<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#weld' title="Concatenate two lists"><code>++weld</code></a>
789<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#weldnl' title="Concatenate nullterminated nouns"><code>++weld:nl</code></a>
789<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#weldnl' title="Concatenate nullterminated nouns"><code>++weld:nl</code></a>
790<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#welp' title="Perfect concatenate (lists)"><code>++welp</code></a>
790<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#welp' title="Perfect concatenate (lists)"><code>++welp</code></a>
791<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wick' title="Knot unescape"><code>++wick</code></a>
791<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wick' title="Knot unescape"><code>++wick</code></a>
792−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#wigre' title="++win render tape"><code>++wig:re</code></a>
793<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#winre' title="Render at indent"><code>++win:re</code></a>
792<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#winre' title="Render at indent"><code>++win:re</code></a>
794<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#wing' title="Address in subject"><code>++wing</code></a>
793<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#wing' title="Address in subject"><code>++wing</code></a>
795<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#wizag' title="Parse base 64 number"><code>++wiz:ag</code></a>
794<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#wizag' title="Parse base 64 number"><code>++wiz:ag</code></a>
@@ -1467,17 +1466,11 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
1467
1466
1468### 4c: tank printer
1467### 4c: tank printer
1469
1468
1469+<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#wash' title="Render tank at width"><code>++wash</code></a>
1470<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#re' title="Prettyprinting engine (tank)"><code>++re</code></a>
1470<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#re' title="Prettyprinting engine (tank)"><code>++re</code></a>
1471−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#dinre' title="(Undocumented)"><code>++din:re</code></a>
1472−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#fitre' title="Fit on one line test"><code>++fit:re</code></a>
1473<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#ramre' title="Flatten tank to tape"><code>++ram:re</code></a>
1471<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#ramre' title="Flatten tank to tape"><code>++ram:re</code></a>
1474−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#rigre' title="Wrap tape in / (tank)"><code>++rig:re</code></a>
1475−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#wigre' title="++win render tape"><code>++wig:re</code></a>
1476<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#winre' title="Render at indent"><code>++win:re</code></a>
1472<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#winre' title="Render at indent"><code>++win:re</code></a>
1477−
1478−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#shep' title="(Undocumented)"><code>++shep</code></a>
1479−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#shop' title="(Undocumented)"><code>++shop</code></a>
1473+<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#show' title="Pretty-printer (deprecated)"><code>++show</code></a>
1480−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#show' title="(Undocumented)"><code>++show</code></a>
1481
1474
1482### 4d: parsing (tracing)
1475### 4d: parsing (tracing)
1483
1476
@@ -1506,8 +1499,10 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
1506<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#easy' title="Always parse"><code>++easy</code></a>
1499<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#easy' title="Always parse"><code>++easy</code></a>
1507<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#full' title="Parse to end"><code>++full</code></a>
1500<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#full' title="Parse to end"><code>++full</code></a>
1508<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#funk' title="Add to tape"><code>++funk</code></a>
1501<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#funk' title="Add to tape"><code>++funk</code></a>
1502+<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#fuss' title="Has A or B?"><code>++fuss</code></a>
1509<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#here' title="Placebased apply"><code>++here</code></a>
1503<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#here' title="Placebased apply"><code>++here</code></a>
1510<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#ifix' title="Infix"><code>++ifix</code></a>
1504<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#ifix' title="Infix"><code>++ifix</code></a>
1505+<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#inde' title="Indentation block"><code>++inde</code></a>
1511<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#jest' title="Match a cord"><code>++jest</code></a>
1506<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#jest' title="Match a cord"><code>++jest</code></a>
1512<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#just' title="Match a single character"><code>++just</code></a>
1507<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#just' title="Match a single character"><code>++just</code></a>
1513<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#knee' title="Recursive parsers"><code>++knee</code></a>
1508<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#knee' title="Recursive parsers"><code>++knee</code></a>
@@ -1515,7 +1510,9 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
1515<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#more' title="Parse list with delimiter"><code>++more</code></a>
1510<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#more' title="Parse list with delimiter"><code>++more</code></a>
1516<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#most' title="Parse list of at least one match"><code>++most</code></a>
1511<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#most' title="Parse list of at least one match"><code>++most</code></a>
1517<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#next' title="Consume character"><code>++next</code></a>
1512<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#next' title="Consume character"><code>++next</code></a>
1513+<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#perk' title="Parse cube fork"><code>++perk</code></a>
1518<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#plus' title="List of at least one match"><code>++plus</code></a>
1514<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#plus' title="List of at least one match"><code>++plus</code></a>
1515+<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#punt' title="Unitized parse"><code>++punt</code></a>
1519<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#sear' title="Conditional ++cook"><code>++sear</code></a>
1516<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#sear' title="Conditional ++cook"><code>++sear</code></a>
1520<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#shim' title="Match character within range"><code>++shim</code></a>
1517<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#shim' title="Match character within range"><code>++shim</code></a>
1521<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#slug' title="Use gate to parse delimited list"><code>++slug</code></a>
1518<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#slug' title="Use gate to parse delimited list"><code>++slug</code></a>
lib/glossary.js+36−43
@@ -2221,13 +2221,6 @@ export const glossary = [
2221 slug: "https://urbit.org/docs/reference/library/3g/#dime",
2221 slug: "https://urbit.org/docs/reference/library/3g/#dime",
2222 desc: "Used in the Hoon standard library.",
2222 desc: "Used in the Hoon standard library.",
2223 },
2223 },
2224− {
2225− name: "(Undocumented)",
2226− symbol: "din:re",
2227− usage: "stdlib",
2228− slug: "https://urbit.org/docs/reference/library/4c/#dinre",
2229− desc: "Used in the Hoon standard library.",
2230− },
2231 {
2224 {
2232 name: "Binary AND (atoms)",
2225 name: "Binary AND (atoms)",
2233 symbol: "dis",
2226 symbol: "dis",
@@ -2690,13 +2683,6 @@ export const glossary = [
2690 slug: "https://urbit.org/docs/reference/library/2b/#find",
2683 slug: "https://urbit.org/docs/reference/library/2b/#find",
2691 desc: "Used in the Hoon standard library.",
2684 desc: "Used in the Hoon standard library.",
2692 },
2685 },
2693− {
2694− name: "Fit on one line test",
2695− symbol: "fit:re",
2696− usage: "stdlib",
2697− slug: "https://urbit.org/docs/reference/library/4c/#fitre",
2698− desc: "Used in the Hoon standard library.",
2699− },
2700 {
2686 {
2701 name: "Boolean (flag)",
2687 name: "Boolean (flag)",
2702 symbol: "flag",
2688 symbol: "flag",
@@ -2823,6 +2809,13 @@ export const glossary = [
2823 slug: "https://urbit.org/docs/reference/library/4f/#funk",
2809 slug: "https://urbit.org/docs/reference/library/4f/#funk",
2824 desc: "Used in the Hoon standard library.",
2810 desc: "Used in the Hoon standard library.",
2825 },
2811 },
2812+ {
2813+ name: "Has A or B?",
2814+ symbol: "fuss",
2815+ usage: "stdlib",
2816+ slug: "https://urbit.org/docs/reference/library/4f/#fuss",
2817+ desc: "Used in the Hoon standard library.",
2818+ },
2826 {
2819 {
2827 name: "New line or ''",
2820 name: "New line or ''",
2828 symbol: "gah",
2821 symbol: "gah",
@@ -3264,6 +3257,13 @@ export const glossary = [
3264 slug: "https://urbit.org/docs/reference/library/2h/#in",
3257 slug: "https://urbit.org/docs/reference/library/2h/#in",
3265 desc: "Used in the Hoon standard library.",
3258 desc: "Used in the Hoon standard library.",
3266 },
3259 },
3260+ {
3261+ name: "Indentation block",
3262+ symbol: "inde",
3263+ usage: "stdlib",
3264+ slug: "https://urbit.org/docs/reference/library/4f/#inde",
3265+ desc: "Used in the Hoon standard library.",
3266+ },
3267 {
3267 {
3268 name: "Parse suffix",
3268 name: "Parse suffix",
3269 symbol: "ind:po",
3269 symbol: "ind:po",
@@ -4258,6 +4258,13 @@ export const glossary = [
4258 slug: "https://urbit.org/docs/reference/library/4l/#perdso",
4258 slug: "https://urbit.org/docs/reference/library/4l/#perdso",
4259 desc: "Used in the Hoon standard library.",
4259 desc: "Used in the Hoon standard library.",
4260 },
4260 },
4261+ {
4262+ name: "Parse cube fork",
4263+ symbol: "perk",
4264+ usage: "stdlib",
4265+ slug: "https://urbit.org/docs/reference/library/4f/#perk",
4266+ desc: "Used in the Hoon standard library.",
4267+ },
4261 {
4268 {
4262 name: "Parse <=5 in base 32",
4269 name: "Parse <=5 in base 32",
4263 symbol: "pev:ab",
4270 symbol: "pev:ab",
@@ -4377,6 +4384,13 @@ export const glossary = [
4377 slug: "https://urbit.org/docs/reference/library/3a/#prosi",
4384 slug: "https://urbit.org/docs/reference/library/3a/#prosi",
4378 desc: "Used in the Hoon standard library.",
4385 desc: "Used in the Hoon standard library.",
4379 },
4386 },
4387+ {
4388+ name: "Unitized parse",
4389+ symbol: "punt",
4390+ usage: "stdlib",
4391+ slug: "https://urbit.org/docs/reference/library/4f/#punt",
4392+ desc: "Used in the Hoon standard library.",
4393+ },
4380 {
4394 {
4381 name: "Add key-value pair (map)",
4395 name: "Add key-value pair (map)",
4382 symbol: "put:by",
4396 symbol: "put:by",
@@ -4629,13 +4643,6 @@ export const glossary = [
4629 slug: "https://urbit.org/docs/reference/library/2i/#ribby",
4643 slug: "https://urbit.org/docs/reference/library/2i/#ribby",
4630 desc: "Used in the Hoon standard library.",
4644 desc: "Used in the Hoon standard library.",
4631 },
4645 },
4632− {
4633− name: "Wrap tape in / (tank)",
4634− symbol: "rig:re",
4635− usage: "stdlib",
4636− slug: "https://urbit.org/docs/reference/library/4c/#rigre",
4637− desc: "Used in the Hoon standard library.",
4638− },
4639 {
4646 {
4640 name: "Disassemble",
4647 name: "Disassemble",
4641 symbol: "rip",
4648 symbol: "rip",
@@ -5105,13 +5112,6 @@ export const glossary = [
5105 slug: "https://urbit.org/docs/reference/library/3d/#shaz",
5112 slug: "https://urbit.org/docs/reference/library/3d/#shaz",
5106 desc: "Used in the Hoon standard library.",
5113 desc: "Used in the Hoon standard library.",
5107 },
5114 },
5108− {
5109− name: "(Undocumented)",
5110− symbol: "shep",
5111− usage: "stdlib",
5112− slug: "https://urbit.org/docs/reference/library/4c/#shep",
5113− desc: "Used in the Hoon standard library.",
5114− },
5115 {
5115 {
5116 name: "Shift power",
5116 name: "Shift power",
5117 symbol: "shf:fl",
5117 symbol: "shf:fl",
@@ -5127,14 +5127,7 @@ export const glossary = [
5127 desc: "Used in the Hoon standard library.",
5127 desc: "Used in the Hoon standard library.",
5128 },
5128 },
5129 {
5129 {
5130− name: "(Undocumented)",
5130+ name: "Pretty-printer (deprecated)",
5131− symbol: "shop",
5132− usage: "stdlib",
5133− slug: "https://urbit.org/docs/reference/library/4c/#shop",
5134− desc: "Used in the Hoon standard library.",
5135− },
5136− {
5137− name: "(Undocumented)",
5138 symbol: "show",
5131 symbol: "show",
5139 usage: "stdlib",
5132 usage: "stdlib",
5140 slug: "https://urbit.org/docs/reference/library/4c/#show",
5133 slug: "https://urbit.org/docs/reference/library/4c/#show",
@@ -6302,6 +6295,13 @@ export const glossary = [
6302 slug: "https://urbit.org/docs/reference/library/2q/#wall",
6295 slug: "https://urbit.org/docs/reference/library/2q/#wall",
6303 desc: "Used in the Hoon standard library.",
6296 desc: "Used in the Hoon standard library.",
6304 },
6297 },
6298+ {
6299+ name: "Render tank at width",
6300+ symbol: "wash",
6301+ usage: "stdlib",
6302+ slug: "https://urbit.org/docs/reference/library/4c/#wash",
6303+ desc: "Used in the Hoon standard library.",
6304+ },
6305 {
6305 {
6306 name: "Concatenate two lists",
6306 name: "Concatenate two lists",
6307 symbol: "weld",
6307 symbol: "weld",
@@ -6330,13 +6330,6 @@ export const glossary = [
6330 slug: "https://urbit.org/docs/reference/library/4b/#wick",
6330 slug: "https://urbit.org/docs/reference/library/4b/#wick",
6331 desc: "Used in the Hoon standard library.",
6331 desc: "Used in the Hoon standard library.",
6332 },
6332 },
6333− {
6334− name: "win - render tape",
6335− symbol: "wig:re",
6336− usage: "stdlib",
6337− slug: "https://urbit.org/docs/reference/library/4c/#wigre",
6338− desc: "Used in the Hoon standard library.",
6339− },
6340 {
6333 {
6341 name: "Render at indent",
6334 name: "Render at indent",
6342 symbol: "win:re",
6335 symbol: "win:re",