@@ -8,470 +8,451 @@ template = "doc.html"
88
99Coin parser engine
1010
11−Core containing arms that parse `++coin`.
11+Core containing arms that parse atoms encoded in strings.
1212
13−#### Accepts
13+#### Source
1414
15−#### Produces
15+```hoon
16+++ so
17+ ~% %so + ~
18+ |%
19+```
20+
21+---
22+
23+### `++bisk:so`
24+
25+Parse aura-atom pair
26+
27+Parsing `rule`. Parses an `@u` of any permitted base,
28+producing a `dime`.
1629
1730#### Source
1831
1932```hoon
20− ++ so
21− |%
33+++ bisk
34+ ~+
35+ ;~ pose
36+ ;~ pfix (just '0')
37+ ;~ pose
38+ (stag %ub ;~(pfix (just 'b') bay:ag))
39+ (stag %uc ;~(pfix (just 'c') fim:ag))
40+ (stag %ui ;~(pfix (just 'i') dim:ag))
41+ (stag %ux ;~(pfix (just 'x') hex:ag))
42+ (stag %uv ;~(pfix (just 'v') viz:ag))
43+ (stag %uw ;~(pfix (just 'w') wiz:ag))
44+ ==
45+ ==
46+ (stag %ud dem:ag)
47+ ==
2248```
2349
2450#### Examples
2551
2652```
27− > so
28− <10.mkn 414.hhh 100.xkc 1.ypj %164>
53+> (scan "25" bisk:so)
54+[%ud 25]
55+
56+> (scan "0x12.6401" bisk:so)
57+[%ux 1.205.249]
2958```
3059
3160---
3261
33−### `++bisk:so`
34−
35−Parse aura-atom pair
36−
37−Parsing rule. Parses an unsigned integer of any permitted base,
38−producing a `++dime`.
62+### `++crub:so`
3963
40−#### Accepts
64+Parse `@da`, `@dr`, `@p`, `@t`
4165
42−#### Produces
66+Parsing `rule`. Parses any atom of any of the following auras after a leading
67+sig: `@da`, `@dr`, `@p`, and `@t`. Produces a `dime`.
4368
4469#### Source
4570
4671```hoon
47− ++ bisk
48− ;~ pose
49− ;~ pfix (just '0')
50− ;~ pose
51− (stag %ub ;~(pfix (just 'b') bay:ag))
52− (stag %ui ;~(pfix (just 'i') dim:ag))
53− (stag %ux ;~(pfix (just 'x') hex:ag))
54− (stag %uv ;~(pfix (just 'v') viz:ag))
55− (stag %uw ;~(pfix (just 'w') wiz:ag))
56− ==
57− ==
58− (stag %ud dem:ag)
59− ==
72+++ crub
73+ ~+
74+ ;~ pose
75+ (cook |=(det=date `dime`[%da (year det)]) when)
76+ ::
77+ %+ cook
78+ |= [a=(list [p=?(%d %h %m %s) q=@]) b=(list @)]
79+ =+ rop=`tarp`[0 0 0 0 b]
80+ |- ^- dime
81+ ?~ a
82+ [%dr (yule rop)]
83+ ?- p.i.a
84+ %d $(a t.a, d.rop (add q.i.a d.rop))
85+ %h $(a t.a, h.rop (add q.i.a h.rop))
86+ %m $(a t.a, m.rop (add q.i.a m.rop))
87+ %s $(a t.a, s.rop (add q.i.a s.rop))
88+ ==
89+ ;~ plug
90+ %+ most
91+ dot
92+ ;~ pose
93+ ;~(pfix (just 'd') (stag %d dim:ag))
94+ ;~(pfix (just 'h') (stag %h dim:ag))
95+ ;~(pfix (just 'm') (stag %m dim:ag))
96+ ;~(pfix (just 's') (stag %s dim:ag))
97+ ==
98+ ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
99+ ==
100+ ::
101+ (stag %p fed:ag)
102+ ;~(pfix dot (stag %ta urs:ab))
103+ ;~(pfix sig (stag %t urx:ab))
104+ ;~(pfix hep (stag %c (cook taft urx:ab)))
105+ ==
60106```
61107
62108#### Examples
63109
64110```
65− > (scan "25" bisk:so)
66− [%ud q=25]
67− > (scan "0x12.6401" bisk:so)
68− [%ux q=1.205.249]
69−```
111+> (scan "1926.5.12" crub:so)
112+[p=~.da q=170.141.184.449.747.016.871.285.095.307.149.312.000]
70113
71−---
114+> ;;([%da @da] (scan "1926.5.12" crub:so))
115+[%da ~1926.5.12]
72116
73−### `++crub:so`
117+> (scan "s10" crub:so)
118+[p=~.dr q=184.467.440.737.095.516.160]
74119
75−Parse `@da`, `@dr`, `@p`, `@t`
120+> ;;([%dr @dr] (scan "s10" crub:so))
121+[%dr ~s10]
76122
77−Parsing rule. Parses any atom of any of the following auras after a
78−leading sig, `~` into a `++dime`: `@da`, `@dr`, `@p`,
79−and `@t`, producing a `++dime`.
123+> (scan "sampel" crub:so)
124+[%p 1.135]
80125
81−#### Accepts
126+> (scan ".mas" crub:so)
127+[%ta 7.561.581]
128+```
82129
83−#### Produces
130+---
131+
132+### `++nuck:so`
133+
134+Top-level coin parser
135+
136+Parsing `rule`. Switches on the first character and applies the
137+corresponding `coin` parser.
84138
85139#### Source
86140
87141```hoon
88− ++ crub
89− ~+
90− ;~ pose
91− %+ cook
92− |=(det/date `dime`[%da (year det)])
93− ;~ plug
94− %+ cook
95− |=({a/@ b/?} [b a])
96− ;~(plug dim:ag ;~(pose (cold | hep) (easy &)))
97− ;~(pfix dot dim:ag) :: month
98− ;~(pfix dot dim:ag) :: day
99− ;~ pose
100− ;~ pfix
101− ;~(plug dot dot)
102− ;~ plug
103− dum:ag
104− ;~(pfix dot dum:ag)
105− ;~(pfix dot dum:ag)
106− ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
107− ==
108− ==
109− (easy [0 0 0 ~])
110− ==
111− ==
112− ::
113− %+ cook
114− |= {a/(list {p/?($d $h $m $s) q/@}) b/(list @)}
115− =+ rop=`tarp`[0 0 0 0 b]
116− |- ^- dime
117− ?~ a
118− [%dr (yule rop)]
119− ?- p.i.a
120− $d $(a t.a, d.rop (add q.i.a d.rop))
121− $h $(a t.a, h.rop (add q.i.a h.rop))
122− $m $(a t.a, m.rop (add q.i.a m.rop))
123− $s $(a t.a, s.rop (add q.i.a s.rop))
124− ==
125− ;~ plug
126− %+ most
127− dot
128− ;~ pose
129− ;~(pfix (just 'd') (stag %d dim:ag))
130− ;~(pfix (just 'h') (stag %h dim:ag))
131− ;~(pfix (just 'm') (stag %m dim:ag))
132− ;~(pfix (just 's') (stag %s dim:ag))
133− ==
134− ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
135− ==
136− ::
137− (stag %p fed:ag)
138− ;~(pfix dot (stag %ta urs:ab))
139− ;~(pfix sig (stag %t urx:ab))
140− ;~(pfix hep (stag %c (cook turf urx:ab)))
141− ==
142− ++ nuck
143− ~/ %nuck |= a/nail %. a
144− %+ knee *coin |. ~+
145− %- stew
146− ^. stet ^. limo
147− :~ :- ['a' 'z'] (cook |=(a/@ta [%$ %tas a]) sym)
148− :- ['0' '9'] (stag %$ bisk)
149− :- '-' (stag %$ tash)
150− :- '.' ;~(pfix dot perd)
151− :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
152− ==
153− ++ nusk
154− ~+
155− :(sear |=(a/@ta (rush a nuck)) wick urt:ab)
156− ++ perd
157− ~+
158− ;~ pose
159− (stag %$ zust)
160− (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
161− ==
162− ++ royl
163− ~+
164− =+ ^= moo
165− |= a/tape
166− :- (lent a)
167− (scan a (bass 10 (plus sid:ab)))
168− =+ ^= voy
169− %+ cook royl-cell
170− ;~ pose
171− ;~ plug
172− (easy %d)
173− ;~ pose (cold | hep) (easy &) ==
174− ;~ plug dim:ag
175− ;~ pose
176− ;~(pfix dot (cook moo (plus (shim '0' '9'))))
177− (easy [0 0])
178− ==
179− ;~ pose
180− ;~ pfix
181− (just 'e')
182− ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
183− ==
184− (easy [& 0])
185− ==
186− ==
187− ==
188− ;~ plug
189− (easy %i)
190− ;~ sfix
191− ;~ pose (cold | hep) (easy &) ==
192− (jest 'inf')
193− ==
194− ==
195− ;~ plug
196− (easy %n)
197− (cold ~ (jest 'nan'))
198− ==
199− ==
200− ;~ pose
201− (stag %rh (cook rylh ;~(pfix ;~(plug sig sig) voy)))
202− (stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) voy)))
203− (stag %rd (cook ryld ;~(pfix sig voy)))
204− (stag %rs (cook ryls voy))
205− ==
206− ::
207− ++ royl-cell
208− |= rn
209− ^- dn
210− ?. ?=({$d *} +<) +<
211− =+ ^= h
212− (dif:si (new:si f.b i.b) (sun:si d.b))
213− [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
214− ::
215− ++ tash
216− ~+
217− =+ ^= neg
218− |= {syn/? mol/dime} ^- dime
219− ?> =('u' (end 3 1 p.mol))
220− [(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
221− ;~ pfix hep
222− ;~ pose
223− (cook |=(a/dime (neg | a)) bisk)
224− ;~(pfix hep (cook |=(a/dime (neg & a)) bisk))
225− ==
226− ==
227− ::
228− ++ twid
229− ~+
230− ;~ pose
231− (cook |=(a/@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
232− (stag %$ crub)
233− ==
234− ::
235− ++ zust
236− ~+
237− ;~ pose
238− (stag %is bip:ag)
239− (stag %if lip:ag)
240− (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
241− royl
242− ==
243− --
142+++ nuck
143+ ~/ %nuck |= a=nail %. a
144+ %+ knee *coin |. ~+
145+ %- stew
146+ ^. stet ^. limo
147+ :~ :- ['a' 'z'] (cook |=(a=@ta [%$ %tas a]) sym)
148+ :- ['0' '9'] (stag %$ bisk)
149+ :- '-' (stag %$ tash)
150+ :- '.' ;~(pfix dot perd)
151+ :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
152+ ==
244153```
245154
246155#### Examples
247156
248157```
249− > (scan "1926.5.12" crub:so)
250− [p=~.da q=170.141.184.449.747.016.871.285.095.307.149.312.000]
251− > ([%da @da] (scan "1926.5.12" crub:so))
252− [%da ~1926.5.12]
253− > (scan "s10" crub:so)
254− [p=~.dr q=184.467.440.737.095.516.160]
255− > ([%dr @dr] (scan "s10" crub:so))
256− [%dr ~s10]
257− > (scan "doznec" crub:so)
258− [%p 256]
259− > (scan ".mas" crub:so)
260− [%ta 7.561.581]
158+> (scan "~pillyt" nuck:so)
159+[%$ p=[p=~.p q=13.184]]
160+
161+> (scan "0x12" nuck:so)
162+[%$ p=[p=~.ux q=18]]
163+
164+> (scan ".127.0.0.1" nuck:so)
165+[%$ p=[p=~.if q=2.130.706.433]]
166+
167+> (scan "._20_0w25_sam__" nuck:so)
168+[ %many
169+ p
170+ ~[
171+ [%$ p=[p=~.ud q=20]]
172+ [%$ p=[p=~.uw q=133]]
173+ [%$ p=[p=~.tas q=7.168.371]]
174+ ]
175+]
261176```
262177
263178---
264179
265−### `++nuck:so`
180+### `++nusk:so`
266181
267−Top-level coin parser
182+Parse coin literal with escapes
268183
269−Parsing rule. Switches on the first character and applies the
270−corresponding `++coin` parser.
184+Parsing `rule`. Parses a coin literal with escapes.
271185
272−#### Accepts
186+#### Source
273187
274−#### Produces
188+```hoon
189+++ nusk
190+ ~+
191+ :(sear |=(a=@ta (rush a nuck)) wick urt:ab)
192+```
193+
194+#### Examples
195+
196+```
197+> ~.asd_a
198+~.asd_a
199+
200+> ._1_~~.asd~-a__
201+[1 ~.asd_a]
202+
203+> (scan "~~.asd~-a" nusk:so)
204+[%$ p=[p=~.ta q=418.212.246.369]]
205+```
206+
207+---
208+
209+### `++perd:so`
210+
211+Parsing coin literal without prefixes
212+
213+Parsing `rule`. Parses a dime or tuple without their respective standard
214+prefixes.
275215
276216#### Source
277217
278218```hoon
279− ++ nuck
280− ~/ %nuck |= a/nail %. a
281− %+ knee *coin |. ~+
282− %- stew
283− ^. stet ^. limo
284− :~ :- ['a' 'z'] (cook |=(a/@ta [%$ %tas a]) sym)
285− :- ['0' '9'] (stag %$ bisk)
286− :- '-' (stag %$ tash)
287− :- '.' ;~(pfix dot perd)
288− :- '~' ;~(pfix sig ;~(pose twid (easy [%$ %n 0])))
289− ==
219+++ perd
220+ ~+
221+ ;~ pose
222+ (stag %$ zust)
223+ (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
224+ ==
290225```
291226
292227#### Examples
293228
294229```
295− > (scan "~pillyt" nuck:so)
296− [% p=[p=~.p q=32.819]]
297− > (scan "0x12" nuck:so)
298− [% p=[p=~.ux q=18]]
299− > (scan ".127.0.0.1" nuck:so)
300− [% p=[p=~.if q=2.130.706.433]]
301− > `@ud`.127.0.0.1
302− 2.130.706.433
303− > (scan "._20_0w25_sam__" nuck:so)
304− [ %many
305− p
306− ~[[% p=[p=~.ud q=20]] [% p=[p=~.uw q=133]] [% p=[p=~.tas q=7.168.371]]]
307− ]
308− > `@`%sam
309− 7.168.371
310− > (scan "~0ph" nuck:so)
311− [%blob p=[1 1]]
312− > ~0ph
313− [1 1]
314− > `@uv`(jam [1 1])
315− 0vph
230+> (scan "y" perd:so)
231+[%$ [%f %.y]]
232+
233+> (scan "n" perd:so)
234+[%$ [%f %.n]]
235+
236+> (scan "_20_x__" perd:so)
237+[%many [[%$ p=[p=~.ud q=20]] [i=[%$ p=[p=~.tas q=120]] t=~]]]
316238```
317239
318240---
319241
320−### `++nusk:so`
242+### `++royl:so`
321243
322−Parse coin literal with escapes
244+Parse dime float
323245
324−Parsing rule. Parses a coin literal with escapes. (See also: xx tuple
325−formatting).
246+Parsing `rule`. Parses a number into a `dime` float.
326247
327−#### Accepts
248+#### Source
328249
329−#### Produces
250+```hoon
251+++ royl
252+ ~+
253+ ;~ pose
254+ (stag %rh royl-rh)
255+ (stag %rq royl-rq)
256+ (stag %rd royl-rd)
257+ (stag %rs royl-rs)
258+ ==
259+```
260+
261+#### Examples
262+
263+```
264+> (scan "~3.14" royl:so)
265+[%rd .~3.14]
266+
267+> (scan "3.14" royl:so)
268+[%rs .3.14]
269+```
270+
271+---
272+
273+### `++royl-rh:so`
274+
275+Parse half-precision float
276+
277+Parsing `rule`. Parses a `@rh`.
330278
331279#### Source
332280
333281```hoon
334− ++ nusk
335− (sear |=(a/@ta (rush (wick a) nuck)) urt:ab)
282+++ royl-rh (cook rylh ;~(pfix ;~(plug sig sig) (cook royl-cell royl-rn)))
336283```
337284
338285#### Examples
339286
340287```
341− > ~.asd_a
342− ~.asd_a
343− > ._1_~~.asd~-a__
344− [1 ~.asd_a]
345− > (scan "~~.asd~-a" nusk:so)
346− [% p=[p=~.ta q=418.212.246.369]]
347− > ([~ %ta @ta] (scan "~~.asd~-a" nusk:so))
348− [~ %ta ~.asd_a]
288+> (scan "~~3.14" royl-rh:so)
289+.~~3.14
349290```
350291
351292---
352293
353−### `++perd:so`
294+### `++royl-rq:so`
354295
355−Parsing rule.
296+Parse quad-precision float
356297
357−Parsing rule. Parses a dime or tuple without their respective standard
358−prefixes.
298+Parsing `rule`. Parses a `@rq`.
359299
360−#### Accepts
300+#### Source
361301
362−#### Produces
302+```hoon
303+++ royl-rq (cook rylq ;~(pfix ;~(plug sig sig sig) (cook royl-cell royl-rn)))
304+```
305+
306+#### Examples
307+
308+```
309+> (scan "~~~3.14" royl-rq:so)
310+.~~~3.14
311+```
312+
313+---
314+
315+### `++royl-rd:so`
316+
317+Parse double-precision float
318+
319+Parsing `rule`. Parses a `@rd`.
363320
364321#### Source
365322
366323```hoon
367− ++ perd
368− ;~ pose
369− (stag ~ zust)
370− (stag %many (ifix [cab ;~(plug cab cab)] (more cab nusk)))
371− ==
324+++ royl-rd (cook ryld ;~(pfix sig (cook royl-cell royl-rn)))
372325```
373326
374327#### Examples
375328
376329```
377− > (scan "y" perd:so)
378− [~ [%f %.y]]
379− > (scan "n" perd:so)
380− [~ [%f %.n]]
381− > |
382− %.n
383− > (scan "_20_x__" perd:so)
384− [%many [[% p=[p=~.ud q=20]] ~[[% p=[p=~.tas q=120]]]]]
330+> (scan "~3.14" royl-rd:so)
331+.~3.14
385332```
386333
387334---
388335
389−### `++royl:so`
336+### `++royl-rs:so`
390337
391−Parse dime float
338+Parse single-precision float
392339
393−Parsing rule. Parses a number into a `++dime` float.
340+Parsing `rule`. Parses a `@rs`.
394341
395−#### Accepts
342+#### Source
396343
397−#### Produces
344+```hoon
345+++ royl-rs (cook ryls (cook royl-cell royl-rn))
346+```
347+
348+#### Examples
349+
350+```
351+> (scan "3.14" royl-rs:so)
352+.3.14
353+```
354+
355+---
356+
357+### `++royl-rn:so`
358+
359+Parse real number
360+
361+Parsing `rule`. Parses a real number to a [`++rn`](/docs/hoon/reference/stdlib/3b#rn).
398362
399363#### Source
400364
401365```hoon
402− ++ royl
403− ~+
404− =+ ^= moo
405− |= a/tape
406− :- (lent a)
407− (scan a (bass 10 (plus sid:ab)))
408− =+ ^= voy
409− %+ cook royl-cell
410− ;~ pose
411− ;~ plug
412− (easy %d)
413− ;~ pose (cold | hep) (easy &) ==
414− ;~ plug dim:ag
415− ;~ pose
416− ;~(pfix dot (cook moo (plus (shim '0' '9'))))
417− (easy [0 0])
418− ==
419− ;~ pose
420− ;~ pfix
421− (just 'e')
422− ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
423− ==
424− (easy [& 0])
425− ==
426− ==
366+++ royl-rn
367+ =/ moo
368+ |= a=tape
369+ :- (lent a)
370+ (scan a (bass 10 (plus sid:ab)))
371+ ;~ pose
372+ ;~ plug
373+ (easy %d)
374+ ;~(pose (cold | hep) (easy &))
375+ ;~ plug dim:ag
376+ ;~ pose
377+ ;~(pfix dot (cook moo (plus (shim '0' '9'))))
378+ (easy [0 0])
427379 ==
428− ;~ plug
429− (easy %i)
430− ;~ sfix
431− ;~ pose (cold | hep) (easy &) ==
432− (jest 'inf')
380+ ;~ pose
381+ ;~ pfix
382+ (just 'e')
383+ ;~(plug ;~(pose (cold | hep) (easy &)) dim:ag)
433384 ==
434− ==
435− ;~ plug
436− (easy %n)
437− (cold ~ (jest 'nan'))
385+ (easy [& 0])
438386 ==
439387 ==
440− ;~ pose
441− (stag %rh (cook rylh ;~(pfix ;~(plug sig sig) voy)))
442− (stag %rq (cook rylq ;~(pfix ;~(plug sig sig sig) voy)))
443− (stag %rd (cook ryld ;~(pfix sig voy)))
444− (stag %rs (cook ryls voy))
445388 ==
446− ::
389+ ::
390+ ;~ plug
391+ (easy %i)
392+ ;~ sfix
393+ ;~(pose (cold | hep) (easy &))
394+ (jest 'inf')
395+ ==
396+ ==
397+ ::
398+ ;~ plug
399+ (easy %n)
400+ (cold ~ (jest 'nan'))
401+ ==
402+ ==
447403```
448404
449405#### Examples
450406
451407```
452− > (scan "~3.14" royl:so)
453− [%rd .~3.13999999999999]
454− > .~3.14
455− .~3.13999999999999
408+> (scan "3.14" royl-rn:so)
409+[%d %.y 3 [2 14] [%.y 0]]
410+
411+> (scan "-3.14e-39" royl-rn:so)
412+[%d %.n 3 [2 14] [%.n 39]]
413+
414+> (scan "3" royl-rn:so)
415+[%d %.y 3 [0 0] [%.y 0]]
456416```
457417
458418---
459419
460420### `++royl-cell:so`
461421
462−XX still not fully functional
422+Convert rn to dn
423+
424+Intermediate parsed float converter. Convert a
425+[`++rn`](/docs/hoon/reference/stdlib/3b#rn) to
426+[`++dn`](/docs/hoon/reference/stdlib/3b#dn).
463427
464−Intermediate parsed float convereter
428+#### Accepts
429+
430+A `++rn`.
431+
432+#### Produces
433+
434+A `++dn`.
435+
436+#### Source
465437
466438```hoon
467− ++ royl-cell
468− |= rn
469− ^- dn
470− ?. ?=({$d *} +<) +<
471− =+ ^= h
472− (dif:si (new:si f.b i.b) (sun:si d.b))
473− [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
474− ::
439+++ royl-cell
440+ |= rn
441+ ^- dn
442+ ?. ?=([%d *] +<) +<
443+ =+ ^= h
444+ (dif:si (new:si f.b i.b) (sun:si d.b))
445+ [%d a h (add (mul c.b (pow 10 d.b)) e.b)]
446+```
447+
448+#### Examples
449+
450+```
451+> (royl-cell:so (scan "3.14" royl-rn:so))
452+[%d s=%.y e=-2 a=314]
453+
454+> (ryls (royl-cell:so (scan "3.14" royl-rn:so)))
455+.3.14
475456```
476457
477458---
@@ -480,41 +461,39 @@ Intermediate parsed float convereter
480461
481462Parse signed dime
482463
483−#### Accepts
484−
485−#### Produces
486−
487−Parsing rule. Parses a signed number into a `++dime`.
464+Parsing `rule`. Parse a `@s` to a `dime`.
488465
489466#### Source
490467
491468```hoon
492− ++ tash
493− ~+
494− =+ ^= neg
495− |= {syn/? mol/dime} ^- dime
496− ?> =('u' (end 3 1 p.mol))
497− [(cat 3 's' (rsh 3 1 p.mol)) (new:si syn q.mol)]
498− ;~ pfix hep
499− ;~ pose
500− (cook |=(a/dime (neg | a)) bisk)
501− ;~(pfix hep (cook |=(a/dime (neg & a)) bisk))
502− ==
503− ==
504− ::
469+++ tash
470+ ~+
471+ =+ ^= neg
472+ |= [syn=? mol=dime] ^- dime
473+ ?> =('u' (end 3 p.mol))
474+ [(cat 3 's' (rsh 3 p.mol)) (new:si syn q.mol)]
475+ ;~ pfix hep
476+ ;~ pose
477+ (cook |=(a=dime (neg | a)) bisk)
478+ ;~(pfix hep (cook |=(a=dime (neg & a)) bisk))
479+ ==
480+ ==
505481```
506482
507483#### Examples
508484
509485```
510− > (scan "-20" tash:so)
511− [p=~.sd q=39]
512− > (,[%sd @sd] (scan "-20" tash:so))
513− [%sd -20]
514− > (,[%sd @sd] (scan "--20" tash:so))
515− [%sd --20]
516− > (,[%sx @sx] (scan "--0x2e" tash:so))
517− [%sx --0x2e]
486+> (scan "-20" tash:so)
487+[p=~.sd q=39]
488+
489+> ;;([%sd @sd] (scan "-20" tash:so))
490+[%sd -20]
491+
492+> ;;([%sd @sd] (scan "--20" tash:so))
493+[%sd --20]
494+
495+> ;;([%sx @sx] (scan "--0x2e" tash:so))
496+[%sx --0x2e]
518497```
519498
520499---
@@ -525,82 +504,115 @@ Parse coins without `~` prefix
525504
526505Parsing rule. Parses coins after a leading sig, `~`.
527506
528−#### Accepts
507+#### Source
529508
530−#### Produces
509+```hoon
510+++ twid
511+ ~+
512+ ;~ pose
513+ %+ stag %blob
514+ %+ sear |=(a=@ (mole |.((cue a))))
515+ ;~(pfix (just '0') vum:ag)
516+ ::
517+ (stag %$ crub)
518+ ==
519+```
520+
521+#### Examples
522+
523+```
524+> (scan "zod" twid:so)
525+[%$ [%p 0]]
526+
527+> (scan ".sam" twid:so)
528+[%$ [%ta 7.168.371]]
529+
530+> (scan "0ph" twid:so)
531+[%blob [1 1]]
532+```
533+
534+---
535+
536+### `++when:so`
537+
538+Parse date
539+
540+Parsing `rule`. Parse a `@da`-formatted date string (sans the leading `~`) to a
541+`date`.
531542
532543#### Source
533544
534545```hoon
535− ++ twid
536− ;~ pose
537− (cook |=(a/@ [%blob (cue a)]) ;~(pfix (just '0') vum:ag))
538− (stag ~ crub)
546+++ when
547+ ~+
548+ ;~ plug
549+ %+ cook
550+ |=([a=@ b=?] [b a])
551+ ;~(plug dim:ag ;~(pose (cold | hep) (easy &)))
552+ ;~(pfix dot mot:ag) :: month
553+ ;~(pfix dot dip:ag) :: day
554+ ;~ pose
555+ ;~ pfix
556+ ;~(plug dot dot)
557+ ;~ plug
558+ dum:ag
559+ ;~(pfix dot dum:ag)
560+ ;~(pfix dot dum:ag)
561+ ;~(pose ;~(pfix ;~(plug dot dot) (most dot qix:ab)) (easy ~))
539562 ==
540− ::
563+ ==
564+ (easy [0 0 0 ~])
565+ ==
566+ ==
541567```
542568
543569#### Examples
544570
545571```
546− > (scan "zod" twid:so)
547− [~ [%p 0]]
548− > (scan ".sam" twid:so)
549− [~ [%ta 7.168.371]]
550− > `@ud`~.sam
551− 7.168.371
552− > `@t`~.sam
553− 'sam'
554− > (scan "0ph" twid:so)
555− [%blob [1 1]]
572+> `date`(scan "2000.1.1..12.00.00..ffff" when:so)
573+[[a=%.y y=2.000] m=1 t=[d=1 h=12 m=0 s=0 f=~[0xffff]]]
556574```
557575
558576---
559577
560578### `++zust:so`
561579
562−Parse prefixed dimes from `@if`, `@f`, `@rd`
580+Parse dimes from `@i`, `@f`, `@r` or `@q`
563581
564−Parsing rule. Parses an atom of either `@if` (IP address), `@f`
565−(loobean), or `rf`(floating point) into a `++dime`.
566−
567−#### Accepts
568−
569−#### Produces
582+Parsing rule. Parses an atom of either `@if` (IP address), `@f` (loobean), `@r`
583+(floating point) into a `dime`. The `@q` alone requires a leading `~`.
570584
571585#### Source
572586
573587```hoon
574− ++ zust
575− ;~ pose
576− (stag %is bip:ag)
577− (stag %if lip:ag)
578− (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
579− royl
580− ==
581− --
588+++ zust
589+ ~+
590+ ;~ pose
591+ (stag %is bip:ag)
592+ (stag %if lip:ag)
593+ royl
594+ (stag %f ;~(pose (cold & (just 'y')) (cold | (just 'n'))))
595+ (stag %q ;~(pfix sig feq:ag))
596+ ==
582597```
583598
584599#### Examples
585600
586601```
587− > (scan "127.0.0.1" zust:so)
588− [%if q=2.130.706.433]
589−
590− > (scan "af.0.0.0.0.e7a5.30d2.7" zust:so)
591− [%is q=908.651.950.243.594.834.993.091.554.288.205.831]
602+> (scan "~sampel" zust:so)
603+[%q 1.135]
592604
593− > (,[%is @is] (scan "af.0.0.0.0.e7a5.30d2.7" zust:so))
594− [%is .af.0.0.0.0.e7a5.30d2.7]
605+> (scan "y" zust:so)
606+[%f %.y]
595607
596− > (,[%is @ux] (scan "af.0.0.0.0.e7a5.30d2.7" zust:so))
597− [%is 0xaf.0000.0000.0000.0000.e7a5.30d2.0007]
608+> (scan "127.0.0.1" zust:so)
609+[%if 2.130.706.433]
598610
599− > (scan "y" zust:so)
600− [%f %.y]
611+> (scan "af.0.0.0.0.e7a5.30d2.7" zust:so)
612+[%is 908.651.950.243.594.834.993.091.554.288.205.831]
601613
602− > (scan "12.09" zust:so)
603− [%rd .~12.00999999999999]
614+> (scan "12.09" zust:so)
615+[%rs .12.09]
604616```
605617
606618---