on master help sign in
Write casts and ?- arms in the canonical layout
138acf9Claude
docs/spec/core-language.md+8−8
@@ -105,14 +105,14 @@ The todo island's `update`, from worked example 3:
105```jibb
105```jibb
106++ update |= [=msg m=model]
106++ update |= [=msg m=model]
107 ?- msg
107 ?- msg
108− [%typed t]
108+ [%typed t]
109− ?- (gth (lent (tuba (trip t))) 80)
109+ ?- (gth (lent (tuba (trip t))) 80)
110− %.y [m(draft=t error=`"Too long") ~]
110+ %.y [m(draft=t error=`"Too long") ~]
111− %.n [m(draft=t error=~) ~]
111+ %.n [m(draft=t error=~) ~]
112− %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
112+ %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
113− [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
113+ [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
114− [%got ts] [m(todos=ts) ~]
114+ [%got ts] [m(todos=ts) ~]
115− [%acked err] [m(error=err) ~]
115+ [%acked err] [m(error=err) ~]
116```
116```
117
117
118lowers to the program below. The model `[todos draft error]` puts `todos` at axis 2, `draft` at 6 and `error` at 7, and `%submit`, the only atom case, needs no test once `cell?` fails.
118lowers to the program below. The model `[todos draft error]` puts `todos` at axis 2, `draft` at 6 and `error` at 7, and `%submit`, the only atom case, needs no test once `cell?` fails.
docs/spec/grammar.md+13−13
@@ -10,7 +10,7 @@ The syntax the compiler accepts.
10- **Layout tokens**: a deeper line emits INDENT, the same depth NEWLINE, a shallower one a DEDENT per closed level, then NEWLINE.
10- **Layout tokens**: a deeper line emits INDENT, the same depth NEWLINE, a shallower one a DEDENT per closed level, then NEWLINE.
11- **Open brackets**: a bracket open at line end takes one item per deeper line and closes at the first line that isn't deeper, with no closer. Brackets opened and closed on one line work as usual. A mold's `[` and `(` open the same way, with one field or mold per deeper line. A line may leave several brackets open: the deeper lines go to the last one, or to the body of the last rune, and the others close with it, so `(column ~ ~[` above its items needs no `)`. On the opener's line, spaces separate items, so `~[text "a"` holds two items. In an expression's open bracket each deeper line is one whole item: `text "a"` there is `(text "a")`, `label=trim " x "` is `label=(trim " x ")`, and under a `(` alone the first deeper line is the head. A mold's open bracket takes exactly one field or mold per deeper line.
11- **Open brackets**: a bracket open at line end takes one item per deeper line and closes at the first line that isn't deeper, with no closer. Brackets opened and closed on one line work as usual. A mold's `[` and `(` open the same way, with one field or mold per deeper line. A line may leave several brackets open: the deeper lines go to the last one, or to the body of the last rune, and the others close with it, so `(column ~ ~[` above its items needs no `)`. On the opener's line, spaces separate items, so `~[text "a"` holds two items. In an expression's open bracket each deeper line is one whole item: `text "a"` there is `(text "a")`, `label=trim " x "` is `label=(trim " x ")`, and under a `(` alone the first deeper line is the head. A mold's open bracket takes exactly one field or mold per deeper line.
12- **Tight forms**: `a+b`, `a.b`, `` `x ``, `|=%got` and the openers `~[`, `|=(`, `$-(` take no spaces. A `(` right after a wing is a change: `m(note=text)` changes, `m (note text)` calls. `%/` starts an application path, `%/blog/(slug)`.
12- **Tight forms**: `a+b`, `a.b`, `` `x ``, `|=%got` and the openers `~[`, `|=(`, `$-(` take no spaces. A `(` right after a wing is a change: `m(note=text)` changes, `m (note text)` calls. `%/` starts an application path, `%/blog/(slug)`.
13−- **Spacing**: one space between items; more for alignment. That is style, which the formatter keeps: the parser takes one or more spaces between items, and allows spaces after an opener, before a closer and at the end of a line. Faces `name=value`, puns `=name` and typed path segments `[id=@ud]` take no spaces, and a rune is followed by one.
13+- **Spacing**: one space between items; more for alignment. That is style, which the formatter keeps: the parser takes one or more spaces between items, and allows spaces after an opener, before a closer and at the end of a line. Faces `name=value`, puns `=name` and typed path segments `[id=@ud]` take no spaces, and a rune is followed by one. The formatter puts a cast whose expression takes the deeper lines at the end of the line it belongs to, the `|=`, `++` or arm line, and a cast whose expression fits on its own line on the line below with it. It starts every `?-` on its own line, below the line it belongs to, with its arms at its depth where the rest of a body allows that, and one level deeper on an open bracket's line.
14- **Comments**: `::` to the end of the line, outside strings; inside a string, `::` is text.
14- **Comments**: `::` to the end of the line, outside strings; inside a string, `::` is text.
15- **Names**: Hoon terms; lowercase letters, digits and hyphens, starting with a letter.
15- **Names**: Hoon terms; lowercase letters, digits and hyphens, starting with a letter.
16- **Type variables**: a capital, then lowercase letters and digits: `A`, `Msg`, `T2`. `AB`, `MSG`, `Msg_x` and `Msg-x` are errors. In a mold, a capitalized name is a type variable and a lowercase name is a mold: the reverse of Elm, where `Msg` is a concrete type and `msg` a type variable.
16- **Type variables**: a capital, then lowercase letters and digits: `A`, `Msg`, `T2`. `AB`, `MSG`, `Msg_x` and `Msg-x` are errors. In a mold, a capitalized name is a type variable and a lowercase name is a mold: the reverse of Elm, where `Msg` is a concrete type and `msg` a type variable.
@@ -223,11 +223,11 @@ Tags can sit anywhere in a case, and a case can carry several:
223
223
224++ describe |= s=step
224++ describe |= s=step
225 ?- s
225 ?- s
226− [%move %left n] "left {n}"
226+ [%move %left n] "left {n}"
227− [%move %right n] "right {n}"
227+ [%move %right n] "right {n}"
228− [t %draft] t
228+ [t %draft] t
229− [t %sent sent-at] t
229+ [t %sent sent-at] t
230− %stop "stop"
230+ %stop "stop"
231```
231```
232
232
233Leaving out `%stop` is an error naming it; to crash instead, write `%stop !!`.
233Leaving out `%stop` is an error naming it; to crash instead, write `%stop !!`.
@@ -322,8 +322,8 @@ knot = { lower | digit | "-" | "." | "~" | "_" } ;
322++ init ^- state [items=~ open=%.n]
322++ init ^- state [items=~ open=%.n]
323++ update |= [a=poke s=state]
323++ update |= [a=poke s=state]
324 ?- a
324 ?- a
325− [%add item] s(items=[item items.s])
325+ [%add item] s(items=[item items.s])
326− %toggle s(open=(not open.s))
326+ %toggle s(open=(not open.s))
327```
327```
328
328
329```jibb
329```jibb
@@ -345,11 +345,11 @@ knot = { lower | digit | "-" | "." | "~" | "_" } ;
345
345
346++ update |= [=msg m=model]
346++ update |= [=msg m=model]
347 ?- msg
347 ?- msg
348− [%noted t] [m(note=t) ~]
348+ [%noted t] [m(note=t) ~]
349− %add [m(note="") ~[(poke.cart [%add note.m] |=%acked)]]
349+ %add [m(note="") ~[(poke.cart [%add note.m] |=%acked)]]
350− %toggle [m ~[(poke.cart %toggle |=%acked)]]
350+ %toggle [m ~[(poke.cart %toggle |=%acked)]]
351− [%got c] [m(cart=c) ~]
351+ [%got c] [m(cart=c) ~]
352− [%acked err] [m ~]
352+ [%acked err] [m ~]
353
353
354++ subs |= m=model
354++ subs |= m=model
355 ~[[%watch (state.cart |=%got)]]
355 ~[[%watch (state.cart |=%got)]]
docs/spec/overview.md+8−8
@@ -469,14 +469,14 @@ A `page`: each request scries `%blog` and renders in Nock.
469
469
470++ update |= [=msg m=model]
470++ update |= [=msg m=model]
471 ?- msg
471 ?- msg
472− [%typed t]
472+ [%typed t]
473− ?- (gth (lent (tuba (trip t))) 80)
473+ ?- (gth (lent (tuba (trip t))) 80)
474− %.y [m(draft=t error=`"Too long") ~]
474+ %.y [m(draft=t error=`"Too long") ~]
475− %.n [m(draft=t error=~) ~]
475+ %.n [m(draft=t error=~) ~]
476− %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
476+ %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
477− [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
477+ [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
478− [%got ts] [m(todos=ts) ~]
478+ [%got ts] [m(todos=ts) ~]
479− [%acked err] [m(error=err) ~]
479+ [%acked err] [m(error=err) ~]
480
480
481++ subs |= m=model
481++ subs |= m=model
482 ~[[%watch (todos.todo |=%got)]]
482 ~[[%watch (todos.todo |=%got)]]
jibb-dev/lib/jibb.hoon+17−15
@@ -810,7 +810,9 @@
810:: (value 8:1 init
810:: (value 8:1 init
811:: (cast 8:9
811:: (cast 8:9
812:: (ref 8:12 state)
812:: (ref 8:12 state)
813−:: (tuple 8:18 (lit 8:19 ~) (lit 8:21 %.n))))
813+:: (tuple 8:18
814+:: (face 8:19 items (lit 8:25 ~))
815+:: (face 8:27 open (lit 8:32 %.n)))))
814:: (value 9:1 update
816:: (value 9:1 update
815:: (gate 9:11
817:: (gate 9:11
816:: (cell 9:14
818:: (cell 9:14
@@ -819,17 +821,17 @@
819:: (body 10:3
821:: (body 10:3
820:: (branch 10:3
822:: (branch 10:3
821:: (wing 10:6 a)
823:: (wing 10:6 a)
822−:: (arm 11:5
824+:: (arm 11:3
823−:: (cell 11:5 (lit 11:6 %add) (bind 11:11 item))
825+:: (cell 11:3 (lit 11:4 %add) (bind 11:9 item))
824−:: (change 11:18 s
826+:: (change 11:16 s
825−:: (edit 11:20 items
827+:: (edit 11:18 items
826−:: (tuple 11:26 (wing 11:27 item) (wing 11:32 items.s)))))
828+:: (tuple 11:24 (wing 11:25 item) (wing 11:30 items.s)))))
827−:: (arm 12:5
829+:: (arm 12:3
828−:: (lit 12:5 %toggle)
830+:: (lit 12:3 %toggle)
829−:: (change 12:18 s
831+:: (change 12:16 s
830−:: (edit 12:20 open
832+:: (edit 12:18 open
831−:: (group 12:25
833+:: (group 12:23
832−:: (call 12:26 (wing 12:26 not) (wing 12:30 open.s)))))))))))
834+:: (call 12:24 (wing 12:24 not) (wing 12:28 open.s)))))))))))
833::
835::
834:: 4.3 Errors (+show-error): "<file>:<line>:<col>: <message>", then the
836:: 4.3 Errors (+show-error): "<file>:<line>:<col>: <message>", then the
835:: source line, then a caret under the column (col - 1 spaces, then ^).
837:: source line, then a caret under the column (col - 1 spaces, then ^).
@@ -840,9 +842,9 @@
840:: prints as a space, so the caret stays under its column and golden
842:: prints as a space, so the caret stays under its column and golden
841:: files hold no raw control bytes.
843:: files hold no raw control bytes.
842::
844::
843−:: /ui/basket.jibb:22:5: msg has no case %submitt
845+:: /ui/basket.jibb:22:3: msg has no case %submitt
844−:: %submitt [m(note="") ~]
846+:: %submitt [m(note="") ~]
845−:: ^
847+:: ^
846::
848::
847|%
849|%
848+| %positions
850+| %positions
jibb-dev/lib/jibb/prelude.jibb+171−181
@@ -8,16 +8,16 @@
8
8
9++ head |= p=[A B]
9++ head |= p=[A B]
10 ?- p
10 ?- p
11− [a b] a
11+ [a b] a
12
12
13++ tail |= p=[A B]
13++ tail |= p=[A B]
14 ?- p
14 ?- p
15− [a b] b
15+ [a b] b
16
16
17++ not |= b=?
17++ not |= b=?
18 ?- b
18 ?- b
19− %.y %.n
19+ %.y %.n
20− %.n %.y
20+ %.n %.y
21
21
22++ eq |= args=[A A] (eq-data.internal args)
22++ eq |= args=[A A] (eq-data.internal args)
23
23
@@ -31,31 +31,29 @@
31
31
32++ fall |= args=[(unit A) A]
32++ fall |= args=[(unit A) A]
33 ?- args
33 ?- args
34− [maybe fallback]
34+ [maybe fallback]
35− ?- maybe
35+ ?- maybe
36− ~ fallback
36+ ~ fallback
37− [~ value] value
37+ [~ value] value
38
38
39++ need |= maybe=(unit A)
39++ need |= maybe=(unit A)
40 ?- maybe
40 ?- maybe
41− ~ !!
41+ ~ !!
42− [~ value] value
42+ [~ value] value
43
43
44++ weld |= args=[(list A) (list A)]
44++ weld |= args=[(list A) (list A)]
45 ?- args
45 ?- args
46− [xs ys]
47− ^- (list A)
46+ [xs ys] ^- (list A)
48− ?- xs
47+ ?- xs
49− ~ ys
48+ ~ ys
50− [item rest] [item (weld rest ys)]
49+ [item rest] [item (weld rest ys)]
51
50
52++ turn |= args=[(list A) $-(A B)]
51++ turn |= args=[(list A) $-(A B)]
53 ?- args
52 ?- args
54− [xs f]
55− ^- (list B)
53+ [xs f] ^- (list B)
56− ?- xs
54+ ?- xs
57− ~ ~
55+ ~ ~
58− [item rest] [(f item) (turn rest f)]
56+ [item rest] [(f item) (turn rest f)]
59
57
60+$ dime [p=@ta q=@]
58+$ dime [p=@ta q=@]
61
59
@@ -104,17 +102,16 @@
104+$ like |$ [A] [p=hair q=(unit [p=A q=nail])]
102+$ like |$ [A] [p=hair q=(unit [p=A q=nail])]
105
103
106++ like |= [f=$-(A B) result=(like A)]
104++ like |= [f=$-(A B) result=(like A)]
107− ++ mapped
108− ^- (unit [p=B q=nail])
105+ ++ mapped ^- (unit [p=B q=nail])
109− ?- q.result
106+ ?- q.result
110− ~ ~
107+ ~ ~
111− [~ value] `[p=(f p.value) q=q.value]
108+ [~ value] `[p=(f p.value) q=q.value]
112 ^- (like B) [p=p.result q=mapped]
109 ^- (like B) [p=p.result q=mapped]
113
110
114++ wonk |= veq=(like A)
111++ wonk |= veq=(like A)
115 ?- q.veq
112 ?- q.veq
116− ~ !!
113+ ~ !!
117− [~ product] p.product
114+ [~ product] p.product
118
115
119+$ lone |$ [A] [p=A]
116+$ lone |$ [A] [p=A]
120
117
@@ -143,214 +140,209 @@
143
140
144++ snoc |= args=[(list A) A]
141++ snoc |= args=[(list A) A]
145 ?- args
142 ?- args
146− [xs item] (weld xs [item ~])
143+ [xs item] (weld xs [item ~])
147
144
148++ flop |= xs=(list A)
145++ flop |= xs=(list A)
149 ++ reverse-into |= args=[(list A) (list A)]
146 ++ reverse-into |= args=[(list A) (list A)]
150 ?- args
147 ?- args
151− [rest acc]
148+ [rest acc]
152− ?- rest
149+ ?- rest
153− ~ acc
150+ ~ acc
154− [item more] (reverse-into more [item acc])
151+ [item more] (reverse-into more [item acc])
155 (reverse-into xs ~)
152 (reverse-into xs ~)
156
153
157−++ drop |= maybe=(unit A)
154+++ drop |= maybe=(unit A) ^- (list A)
158− ^- (list A)
159− ?- maybe
155+ ?- maybe
160− ~ ~
156+ ~ ~
161− [~ value] [value ~]
157+ [~ value] [value ~]
162
158
163++ bond |= fallback=$-(~ A)
159++ bond |= fallback=$-(~ A)
164 |= maybe=(unit A)
160 |= maybe=(unit A)
165 ?- maybe
161 ?- maybe
166− ~ (fallback ~)
162+ ~ (fallback ~)
167− [~ value] value
163+ [~ value] value
168
164
169++ bind |= args=[(unit A) $-(A B)]
165++ bind |= args=[(unit A) $-(A B)]
170 ?- args
166 ?- args
171− [maybe f] ^- (unit B)
167+ [maybe f] ^- (unit B)
172− ?- maybe
168+ ?- maybe
173− ~ ~
169+ ~ ~
174− [~ value] `(f value)
170+ [~ value] `(f value)
175
171
176++ biff |= args=[(unit A) $-(A (unit B))]
172++ biff |= args=[(unit A) $-(A (unit B))]
177 ?- args
173 ?- args
178− [maybe f] ^- (unit B)
174+ [maybe f] ^- (unit B)
179− ?- maybe
175+ ?- maybe
180− ~ ~
176+ ~ ~
181− [~ value] (f value)
177+ [~ value] (f value)
182
178
183++ both |= args=[(unit A) (unit B)]
179++ both |= args=[(unit A) (unit B)]
184 ?- args
180 ?- args
185− [first second] ^- (unit [A B])
181+ [first second] ^- (unit [A B])
186− ?- first
182+ ?- first
187− ~ ~
183+ ~ ~
188− [~ a]
184+ [~ a]
189− ?- second
185+ ?- second
190− ~ ~
186+ ~ ~
191− [~ b] `[a b]
187+ [~ b] `[a b]
192
188
193++ clap |= args=[(unit A) (unit A) $-([A A] A)]
189++ clap |= args=[(unit A) (unit A) $-([A A] A)]
194 ?- args
190 ?- args
195− [first second combine] ^- (unit A)
191+ [first second combine] ^- (unit A)
196− ?- first
192+ ?- first
197− ~ second
193+ ~ second
198− [~ a]
194+ [~ a]
199− ?- second
195+ ?- second
200− ~ first
196+ ~ first
201− [~ b] `(combine a b)
197+ [~ b] `(combine a b)
202
198
203++ hunt |= args=[$-([A A] ?) (unit A) (unit A)]
199++ hunt |= args=[$-([A A] ?) (unit A) (unit A)]
204 ?- args
200 ?- args
205− [choose first second] ^- (unit A)
201+ [choose first second] ^- (unit A)
206− ?- first
202+ ?- first
207− ~ second
203+ ~ second
208− [~ a]
204+ [~ a]
209− ?- second
205+ ?- second
210− ~ first
206+ ~ first
211− [~ b]
207+ [~ b]
212− ?- (choose a b)
208+ ?- (choose a b)
213− %.y first
209+ %.y first
214− %.n second
210+ %.n second
215
211
216++ mate |= args=[(unit A) (unit A)]
212++ mate |= args=[(unit A) (unit A)]
217 ?- args
213 ?- args
218− [first second] ^- (unit A)
214+ [first second] ^- (unit A)
219− ?- second
215+ ?- second
220− ~ first
216+ ~ first
221− [~ b]
217+ [~ b]
222− ?- first
218+ ?- first
223− ~ second
219+ ~ second
224− [~ a]
220+ [~ a]
225− ?- (eq a b)
221+ ?- (eq a b)
226− %.y first
222+ %.y first
227− %.n !!
223+ %.n !!
228
224
229++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
225++ clef |= args=[(unit A) (unit B) $-([A B] (unit C))]
230 ?- args
226 ?- args
231− [first second combine] ^- (unit C)
227+ [first second combine] ^- (unit C)
232− ?- first
228+ ?- first
233− ~ ~
229+ ~ ~
234− [~ a]
230+ [~ a]
235− ?- second
231+ ?- second
236− ~ ~
232+ ~ ~
237− [~ b] (combine a b)
233+ [~ b] (combine a b)
238
234
239++ skim |= args=[(list A) $-(A ?)]
235++ skim |= args=[(list A) $-(A ?)]
240 ?- args
236 ?- args
241− [xs predicate] ^- (list A)
237+ [xs predicate] ^- (list A)
242− ?- xs
238+ ?- xs
243− ~ ~
239+ ~ ~
244− [item rest]
240+ [item rest]
245− ?- (predicate item)
241+ ?- (predicate item)
246− %.y [item (skim rest predicate)]
242+ %.y [item (skim rest predicate)]
247− %.n (skim rest predicate)
243+ %.n (skim rest predicate)
248
244
249++ skip |= args=[(list A) $-(A ?)]
245++ skip |= args=[(list A) $-(A ?)]
250 ?- args
246 ?- args
251− [xs predicate] ^- (list A)
247+ [xs predicate] ^- (list A)
252− ?- xs
248+ ?- xs
253− ~ ~
249+ ~ ~
254− [item rest]
250+ [item rest]
255− ?- (predicate item)
251+ ?- (predicate item)
256− %.y (skip rest predicate)
252+ %.y (skip rest predicate)
257− %.n [item (skip rest predicate)]
253+ %.n [item (skip rest predicate)]
258−
254+
259−++ levy |= args=[(list A) $-(A ?)]
255+++ levy |= args=[(list A) $-(A ?)] ^- ?
260− ^- ?
261− ?- args
256+ ?- args
262− [xs predicate]
257+ [xs predicate]
263− ?- xs
258+ ?- xs
264− ~ %.y
259+ ~ %.y
265− [item rest]
260+ [item rest]
266− ?- (predicate item)
261+ ?- (predicate item)
267− %.y (levy rest predicate)
262+ %.y (levy rest predicate)
268− %.n %.n
263+ %.n %.n
269−
264+
270−++ lien |= args=[(list A) $-(A ?)]
265+++ lien |= args=[(list A) $-(A ?)] ^- ?
271− ^- ?
272− ?- args
266+ ?- args
273− [xs predicate]
267+ [xs predicate]
274− ?- xs
268+ ?- xs
275− ~ %.n
269+ ~ %.n
276− [item rest]
270+ [item rest]
277− ?- (predicate item)
271+ ?- (predicate item)
278− %.y %.y
272+ %.y %.y
279− %.n (lien rest predicate)
273+ %.n (lien rest predicate)
280
274
281++ roll |= args=[(list A) B $-([A B] B)]
275++ roll |= args=[(list A) B $-([A B] B)]
282 ?- args
276 ?- args
283− [xs start combine]
277+ [xs start combine]
284− ?- xs
278+ ?- xs
285− ~ start
279+ ~ start
286− [item rest] (roll rest (combine item start) combine)
280+ [item rest] (roll rest (combine item start) combine)
287
281
288++ reel |= args=[(list A) B $-([A B] B)]
282++ reel |= args=[(list A) B $-([A B] B)]
289 ?- args
283 ?- args
290− [xs start combine]
284+ [xs start combine]
291− ?- xs
285+ ?- xs
292− ~ start
286+ ~ start
293− [item rest] (combine item (reel rest start combine))
287+ [item rest] (combine item (reel rest start combine))
294
288
295++ flit |= predicate=$-(A ?)
289++ flit |= predicate=$-(A ?)
296− |= value=A
290+ |= value=A ^- (unit A)
297− ^- (unit A)
298− ?- (predicate value)
291+ ?- (predicate value)
299− %.y `value
292+ %.y `value
300− %.n ~
293+ %.n ~
301
294
302++ murn |= args=[(list A) $-(A (unit B))]
295++ murn |= args=[(list A) $-(A (unit B))]
303 ?- args
296 ?- args
304− [xs f] ^- (list B)
297+ [xs f] ^- (list B)
305− ?- xs
298+ ?- xs
306− ~ ~
299+ ~ ~
307− [item rest]
300+ [item rest]
308− ?- (f item)
301+ ?- (f item)
309− ~ (murn rest f)
302+ ~ (murn rest f)
310− [~ value] [value (murn rest f)]
303+ [~ value] [value (murn rest f)]
311
304
312++ join |= args=[A (list A)]
305++ join |= args=[A (list A)]
313 ?- args
306 ?- args
314− [separator xs] ^- (list A)
315− ?- xs
316− ~ ~
317− [item rest]
318− ?- rest
319− ~ [item ~]
320− [next more] [item [separator (join separator rest)]]
321−
322−++ snip |= xs=(list A)
323− ^- (list A)
307+ [separator xs] ^- (list A)
324 ?- xs
308 ?- xs
309+ ~ ~
310+ [item rest]
311+ ?- rest
325− ~ ~
312+ ~ [item ~]
326− [item rest]
313+ [next more] [item [separator (join separator rest)]]
314+
315+++ snip |= xs=(list A) ^- (list A)
316+ ?- xs
317+ ~ ~
327− ?- rest
318+ [item rest]
319+ ?- rest
328− ~ ~
320+ ~ ~
329− [next more] [item (snip rest)]
321+ [next more] [item (snip rest)]
330
322
331++ rear |= xs=(list A)
323++ rear |= xs=(list A)
332 ?- xs
324 ?- xs
333− ~ !!
325+ ~ !!
334− [item rest]
326+ [item rest]
335− ?- rest
327+ ?- rest
336− ~ item
328+ ~ item
337− [next more] (rear rest)
329+ [next more] (rear rest)
338
330
339++ cork |= gates=[$-(A B) $-(B C)]
331++ cork |= gates=[$-(A B) $-(B C)]
340 ?- gates
332 ?- gates
341− [f g] |= x=A (g (f x))
333+ [f g] |= x=A (g (f x))
342
334
343++ corl |= gates=[$-(B C) $-(A B)]
335++ corl |= gates=[$-(B C) $-(A B)]
344 ?- gates
336 ?- gates
345− [f g] |= x=A (f (g x))
337+ [f g] |= x=A (f (g x))
346
338
347++ cury |= args=[$-([A B] C) A]
339++ cury |= args=[$-([A B] C) A]
348 ?- args
340 ?- args
349− [f a] |= b=B (f a b)
341+ [f a] |= b=B (f a b)
350
342
351++ curr |= args=[$-([A B] C) B]
343++ curr |= args=[$-([A B] C) B]
352 ?- args
344 ?- args
353− [f b] |= a=A (f a b)
345+ [f b] |= a=A (f a b)
354
346
355+$ cmd |$ [M]
347+$ cmd |$ [M]
356 [%poke p=raw-poke reply=$-((unit @t) M)]
348 [%poke p=raw-poke reply=$-((unit @t) M)]
@@ -373,29 +365,27 @@
373 [%url reply=$-(path M)]
365 [%url reply=$-(path M)]
374
366
375:: Count a finite list with the source-backed addition gate.
367:: Count a finite list with the source-backed addition gate.
376−++ lent |= xs=(list A)
368+++ lent |= xs=(list A) ^- @ud
377− ^- @ud
378− ?- xs
369+ ?- xs
379− ~ 0
370+ ~ 0
380− [item rest] (add 1 (lent rest))
371+ [item rest] (add 1 (lent rest))
381
372
382++ lth |= args=[A A]
373++ lth |= args=[A A]
383 ?- args
374 ?- args
384− [x y] (gth y x)
375+ [x y] (gth y x)
385
376
386++ gte |= args=[A A]
377++ gte |= args=[A A]
387 ?- args
378 ?- args
388− [x y] (not (gth y x))
379+ [x y] (not (gth y x))
389
380
390++ lte |= args=[A A]
381++ lte |= args=[A A]
391 ?- args
382 ?- args
392− [x y] (not (gth x y))
383+ [x y] (not (gth x y))
393
384
394−++ zing |= xss=(list (list A))
385+++ zing |= xss=(list (list A)) ^- (list A)
395− ^- (list A)
396− ?- xss
386+ ?- xss
397− ~ ~
387+ ~ ~
398− [xs rest] (weld xs (zing rest))
388+ [xs rest] (weld xs (zing rest))
399
389
400++ lead |= first=A |= second=B [first second]
390++ lead |= first=A |= second=B [first second]
401++ late |= second=B |= first=A [first second]
391++ late |= second=B |= first=A [first second]
my-app/ui/basket.jibb+5−5
@@ -16,11 +16,11 @@
16
16
17++ update |= [=msg m=model]
17++ update |= [=msg m=model]
18 ?- msg
18 ?- msg
19− [%noted t] [m(note=t) ~]
19+ [%noted t] [m(note=t) ~]
20− %add [m(note="") ~[(poke.cart [%add note.m] |=%acked)]]
20+ %add [m(note="") ~[(poke.cart [%add note.m] |=%acked)]]
21− %toggle [m ~[(poke.cart %toggle |=%acked)]]
21+ %toggle [m ~[(poke.cart %toggle |=%acked)]]
22− [%got c] [m(cart=c) ~]
22+ [%got c] [m(cart=c) ~]
23− [%acked err] [m ~]
23+ [%acked err] [m ~]
24
24
25++ subs |= m=model
25++ subs |= m=model
26 ~[[%watch (state.cart |=%got)]]
26 ~[[%watch (state.cart |=%got)]]
my-app/ui/stores/cart.jibb+2−2
@@ -8,5 +8,5 @@
8++ init ^- state [items=~ open=%.n]
8++ init ^- state [items=~ open=%.n]
9++ update |= [a=poke s=state]
9++ update |= [a=poke s=state]
10 ?- a
10 ?- a
11− [%add item] s(items=[item items.s])
11+ [%add item] s(items=[item items.s])
12− %toggle s(open=(not open.s))
12+ %toggle s(open=(not open.s))
my-app/ui/todo-list.jibb+8−8
@@ -15,14 +15,14 @@
15
15
16++ update |= [=msg m=model]
16++ update |= [=msg m=model]
17 ?- msg
17 ?- msg
18− [%typed t]
18+ [%typed t]
19− ?- (gth (lent (tuba (trip t))) 80)
19+ ?- (gth (lent (tuba (trip t))) 80)
20− %.y [m(draft=t error=`"Too long") ~]
20+ %.y [m(draft=t error=`"Too long") ~]
21− %.n [m(draft=t error=~) ~]
21+ %.n [m(draft=t error=~) ~]
22− %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
22+ %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
23− [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
23+ [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
24− [%got ts] [m(todos=ts) ~]
24+ [%got ts] [m(todos=ts) ~]
25− [%acked err] [m(error=err) ~]
25+ [%acked err] [m(error=err) ~]
26
26
27++ subs |= m=model
27++ subs |= m=model
28 ~[[%watch (todos.todo |=%got)]]
28 ~[[%watch (todos.todo |=%got)]]
tests/golden/doc-core-02-update/about.txt+1−1
@@ -1,3 +1,3 @@
1source: Core language tab, section "Example", code block 2 of the tab
1source: Core language tab, section "Example", code block 2 of the tab
2−tests: the todo island's `update` on its own, as the Core language tab quotes it: a module of one `++`; a `?-` arm with its body on the deeper lines holding a nested `?-`; changes, units, lists and constructors in arm expressions. The same text as lines 16-25 of doc-overview-10-todo-list
2+tests: the todo island's `update` on its own, as the Core language tab quotes it: a module of one `++`; a `?-` with its arms at its own depth, one arm with its body on the deeper lines holding a nested `?-` whose arms are at that `?-`'s depth; changes, units, lists and constructors in arm expressions. The same text as lines 16-25 of doc-overview-10-todo-list
3expect: parses
3expect: parses
tests/golden/doc-core-02-update/source.jibb+8−8
@@ -1,10 +1,10 @@
1++ update |= [=msg m=model]
1++ update |= [=msg m=model]
2 ?- msg
2 ?- msg
3− [%typed t]
3+ [%typed t]
4− ?- (gth (lent (tuba (trip t))) 80)
4+ ?- (gth (lent (tuba (trip t))) 80)
5− %.y [m(draft=t error=`"Too long") ~]
5+ %.y [m(draft=t error=`"Too long") ~]
6− %.n [m(draft=t error=~) ~]
6+ %.n [m(draft=t error=~) ~]
7− %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
7+ %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
8− [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
8+ [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
9− [%got ts] [m(todos=ts) ~]
9+ [%got ts] [m(todos=ts) ~]
10− [%acked err] [m(error=err) ~]
10+ [%acked err] [m(error=err) ~]
tests/golden/doc-core-02-update/tokens.txt+120−122
@@ -11,126 +11,124 @@
112:3 INDENT
112:3 INDENT
122:3 glyph ?-
122:3 glyph ?-
132:6 name msg
132:6 name msg
14−3:5 INDENT
14+3:3 NEWLINE
15−3:5 glyph [
15+3:3 glyph [
16−3:6 tight lit %typed
16+3:4 tight lit %typed
17−3:13 name t
17+3:11 name t
18−3:14 tight glyph ]
18+3:12 tight glyph ]
19−4:7 INDENT
19+4:5 INDENT
20−4:7 glyph ?-
20+4:5 glyph ?-
21−4:10 glyph (
21+4:8 glyph (
22−4:11 tight name gth
22+4:9 tight name gth
23−4:15 glyph (
23+4:13 glyph (
24−4:16 tight name lent
24+4:14 tight name lent
25−4:21 glyph (
25+4:19 glyph (
26−4:22 tight name tuba
26+4:20 tight name tuba
27−4:27 glyph (
27+4:25 glyph (
28−4:28 tight name trip
28+4:26 tight name trip
29−4:33 name t
29+4:31 name t
30+4:32 tight glyph )
31+4:33 tight glyph )
304:34 tight glyph )
324:34 tight glyph )
31−4:35 tight glyph )
32−4:36 tight glyph )
33−4:38 lit 80
33+4:36 lit 80
34−4:40 tight glyph )
34+4:38 tight glyph )
35−5:9 INDENT
35+5:5 NEWLINE
36−5:9 lit %.y
36+5:5 lit %.y
37−5:14 glyph [
37+5:10 glyph [
38−5:15 tight name m
38+5:11 tight name m
39−5:16 tight glyph (
39+5:12 tight glyph (
40−5:17 tight name draft
40+5:13 tight name draft
41−5:22 tight glyph =
41+5:18 tight glyph =
42−5:23 tight name t
42+5:19 tight name t
43−5:25 name error
43+5:21 name error
44−5:30 tight glyph =
44+5:26 tight glyph =
45−5:31 tight glyph `
45+5:27 tight glyph `
46−5:32 tight str "Too long"
46+5:28 tight str "Too long"
47−5:42 tight glyph )
47+5:38 tight glyph )
48−5:44 lit ~
48+5:40 lit ~
49−5:45 tight glyph ]
49+5:41 tight glyph ]
50−6:9 NEWLINE
50+6:5 NEWLINE
51−6:9 lit %.n
51+6:5 lit %.n
52−6:14 glyph [
52+6:10 glyph [
53−6:15 tight name m
53+6:11 tight name m
54−6:16 tight glyph (
54+6:12 tight glyph (
55−6:17 tight name draft
55+6:13 tight name draft
56−6:22 tight glyph =
56+6:18 tight glyph =
57−6:23 tight name t
57+6:19 tight name t
58−6:25 name error
58+6:21 name error
59−6:30 tight glyph =
59+6:26 tight glyph =
60−6:31 tight lit ~
60+6:27 tight lit ~
61−6:32 tight glyph )
61+6:28 tight glyph )
62−6:34 lit ~
62+6:30 lit ~
63−6:35 tight glyph ]
63+6:31 tight glyph ]
64−7:5 DEDENT
64+7:3 DEDENT
65−7:5 DEDENT
66−7:5 NEWLINE
65+7:3 NEWLINE
67−7:5 lit %submit
66+7:3 lit %submit
68−7:20 glyph [
67+7:18 glyph [
69−7:21 tight name m
68+7:19 tight name m
70−7:22 tight glyph (
69+7:20 tight glyph (
71−7:23 tight name draft
70+7:21 tight name draft
72−7:28 tight glyph =
71+7:26 tight glyph =
73−7:29 tight str ""
72+7:27 tight str ""
74−7:31 tight glyph )
73+7:29 tight glyph )
75−7:33 glyph ~[
74+7:31 glyph ~[
76−7:35 tight glyph (
75+7:33 tight glyph (
77−7:36 tight wing poke.todo
76+7:34 tight wing poke.todo
78−7:46 glyph [
77+7:44 glyph [
79−7:47 tight lit %add
78+7:45 tight lit %add
80−7:52 wing draft.m
79+7:50 wing draft.m
81−7:59 tight glyph ]
80+7:57 tight glyph ]
81+7:59 glyph |=
82+7:61 tight lit %acked
82−7:61 glyph |=
83+7:67 tight glyph )
83−7:63 tight lit %acked
84+7:68 tight glyph ]
84−7:69 tight glyph )
85+7:69 tight glyph ]
85−7:70 tight glyph ]
86−7:71 tight glyph ]
87−8:5 NEWLINE
86+8:3 NEWLINE
88−8:5 glyph [
87+8:3 glyph [
89−8:6 tight lit %toggled
88+8:4 tight lit %toggled
90−8:15 name id
89+8:13 name id
91−8:17 tight glyph ]
90+8:15 tight glyph ]
92−8:20 glyph [
91+8:18 glyph [
93−8:21 tight name m
92+8:19 tight name m
94−8:23 glyph ~[
93+8:21 glyph ~[
95−8:25 tight glyph (
94+8:23 tight glyph (
96−8:26 tight wing poke.todo
95+8:24 tight wing poke.todo
97−8:36 glyph [
96+8:34 glyph [
98−8:37 tight lit %toggle
97+8:35 tight lit %toggle
99−8:45 name id
98+8:43 name id
100−8:47 tight glyph ]
99+8:45 tight glyph ]
101−8:49 glyph |=
100+8:47 glyph |=
102−8:51 tight lit %acked
101+8:49 tight lit %acked
103−8:57 tight glyph )
102+8:55 tight glyph )
104−8:58 tight glyph ]
103+8:56 tight glyph ]
105−8:59 tight glyph ]
104+8:57 tight glyph ]
106−9:5 NEWLINE
105+9:3 NEWLINE
107−9:5 glyph [
106+9:3 glyph [
108−9:6 tight lit %got
107+9:4 tight lit %got
109−9:11 name ts
108+9:9 name ts
110−9:13 tight glyph ]
109+9:11 tight glyph ]
111−9:20 glyph [
110+9:18 glyph [
112−9:21 tight name m
111+9:19 tight name m
113−9:22 tight glyph (
112+9:20 tight glyph (
114−9:23 tight name todos
113+9:21 tight name todos
115−9:28 tight glyph =
114+9:26 tight glyph =
116−9:29 tight name ts
115+9:27 tight name ts
117−9:31 tight glyph )
116+9:29 tight glyph )
118−9:33 lit ~
117+9:31 lit ~
119−9:34 tight glyph ]
118+9:32 tight glyph ]
120−10:5 NEWLINE
119+10:3 NEWLINE
121−10:5 glyph [
120+10:3 glyph [
122−10:6 tight lit %acked
121+10:4 tight lit %acked
123−10:13 name err
122+10:11 name err
124−10:16 tight glyph ]
123+10:14 tight glyph ]
125−10:20 glyph [
124+10:18 glyph [
126−10:21 tight name m
125+10:19 tight name m
127−10:22 tight glyph (
126+10:20 tight glyph (
128−10:23 tight name error
127+10:21 tight name error
129−10:28 tight glyph =
128+10:26 tight glyph =
130−10:29 tight name err
129+10:27 tight name err
131−10:32 tight glyph )
130+10:30 tight glyph )
132−10:34 lit ~
131+10:32 lit ~
133−10:35 tight glyph ]
132+10:33 tight glyph ]
134−10:36 DEDENT
133+10:34 DEDENT
135−10:36 DEDENT
136−10:36 NEWLINE
134+10:34 NEWLINE
tests/golden/doc-core-02-update/tree.txt+64−64
@@ -7,67 +7,67 @@
7 (body 2:3
7 (body 2:3
8 (branch 2:3
8 (branch 2:3
9 (wing 2:6 msg)
9 (wing 2:6 msg)
10− (arm 3:5
10+ (arm 3:3
11− (cell 3:5 (lit 3:6 %typed) (bind 3:13 t))
11+ (cell 3:3 (lit 3:4 %typed) (bind 3:11 t))
12− (body 4:7
12+ (body 4:5
13− (branch 4:7
13+ (branch 4:5
14− (group 4:10
14+ (group 4:8
15− (call 4:11
15+ (call 4:9
16− (wing 4:11 gth)
16+ (wing 4:9 gth)
17− (group 4:15
17+ (group 4:13
18− (call 4:16
18+ (call 4:14
19− (wing 4:16 lent)
19+ (wing 4:14 lent)
20− (group 4:21
20+ (group 4:19
21− (call 4:22
21+ (call 4:20
22− (wing 4:22 tuba)
22+ (wing 4:20 tuba)
23− (group 4:27
23+ (group 4:25
24− (call 4:28 (wing 4:28 trip) (wing 4:33 t)))))))
24+ (call 4:26 (wing 4:26 trip) (wing 4:31 t)))))))
25− (lit 4:38 80)))
25+ (lit 4:36 80)))
26− (arm 5:9
26+ (arm 5:5
27− (lit 5:9 %.y)
27+ (lit 5:5 %.y)
28− (tuple 5:14
28+ (tuple 5:10
29− (change 5:15 m
29+ (change 5:11 m
30− (edit 5:17 draft (wing 5:23 t))
30+ (edit 5:13 draft (wing 5:19 t))
31− (edit 5:25 error
31+ (edit 5:21 error
32− (unit 5:31 (str 5:32 "Too long"))))
32+ (unit 5:27 (str 5:28 "Too long"))))
33− (lit 5:44 ~)))
33+ (lit 5:40 ~)))
34− (arm 6:9
34+ (arm 6:5
35− (lit 6:9 %.n)
35+ (lit 6:5 %.n)
36− (tuple 6:14
36+ (tuple 6:10
37− (change 6:15 m
37+ (change 6:11 m
38− (edit 6:17 draft (wing 6:23 t))
38+ (edit 6:13 draft (wing 6:19 t))
39− (edit 6:25 error (lit 6:31 ~)))
39+ (edit 6:21 error (lit 6:27 ~)))
40− (lit 6:34 ~))))))
40+ (lit 6:30 ~))))))
41− (arm 7:5
41+ (arm 7:3
42− (lit 7:5 %submit)
42+ (lit 7:3 %submit)
43− (tuple 7:20
43+ (tuple 7:18
44− (change 7:21 m
44+ (change 7:19 m
45− (edit 7:23 draft (str 7:29 "")))
45+ (edit 7:21 draft (str 7:27 "")))
46− (list 7:33
46+ (list 7:31
47− (group 7:35
47+ (group 7:33
48− (call 7:36
48+ (call 7:34
49− (wing 7:36 poke.todo)
49+ (wing 7:34 poke.todo)
50− (tuple 7:46 (lit 7:47 %add) (wing 7:52 draft.m))
50+ (tuple 7:44 (lit 7:45 %add) (wing 7:50 draft.m))
51− (ctor 7:61 %acked))))))
51+ (ctor 7:59 %acked))))))
52− (arm 8:5
52+ (arm 8:3
53− (cell 8:5 (lit 8:6 %toggled) (bind 8:15 id))
53+ (cell 8:3 (lit 8:4 %toggled) (bind 8:13 id))
54− (tuple 8:20
54+ (tuple 8:18
55− (wing 8:21 m)
55+ (wing 8:19 m)
56− (list 8:23
56+ (list 8:21
57− (group 8:25
57+ (group 8:23
58− (call 8:26
58+ (call 8:24
59− (wing 8:26 poke.todo)
59+ (wing 8:24 poke.todo)
60− (tuple 8:36 (lit 8:37 %toggle) (wing 8:45 id))
60+ (tuple 8:34 (lit 8:35 %toggle) (wing 8:43 id))
61− (ctor 8:49 %acked))))))
61+ (ctor 8:47 %acked))))))
62− (arm 9:5
62+ (arm 9:3
63− (cell 9:5 (lit 9:6 %got) (bind 9:11 ts))
63+ (cell 9:3 (lit 9:4 %got) (bind 9:9 ts))
64− (tuple 9:20
64+ (tuple 9:18
65− (change 9:21 m
65+ (change 9:19 m
66− (edit 9:23 todos (wing 9:29 ts)))
66+ (edit 9:21 todos (wing 9:27 ts)))
67− (lit 9:33 ~)))
67+ (lit 9:31 ~)))
68− (arm 10:5
68+ (arm 10:3
69− (cell 10:5 (lit 10:6 %acked) (bind 10:13 err))
69+ (cell 10:3 (lit 10:4 %acked) (bind 10:11 err))
70− (tuple 10:20
70+ (tuple 10:18
71− (change 10:21 m
71+ (change 10:19 m
72− (edit 10:23 error (wing 10:29 err)))
72+ (edit 10:21 error (wing 10:27 err)))
73− (lit 10:34 ~))))))))
73+ (lit 10:32 ~))))))))
tests/golden/doc-grammar-04-step/about.txt+1−1
@@ -1,4 +1,4 @@
1source: Grammar tab, section "Patterns", code block 4 of the tab
1source: Grammar tab, section "Patterns", code block 4 of the tab
2−tests: a union `+$ step` with one case per deeper line: cells with tags at the head, in the middle and at the end, faced fields, and a bare term; a blank line between definitions; a `?-` whose arms are cell patterns mixing tags and binding names, and a bare term, with their expressions aligned by extra spaces; interpolated strings and a name as arm expressions
2+tests: a union `+$ step` with one case per deeper line: cells with tags at the head, in the middle and at the end, faced fields, and a bare term; a blank line between definitions; a `?-` whose arms, at its own depth, are cell patterns mixing tags and binding names, and a bare term, with their expressions aligned by extra spaces; interpolated strings and a name as arm expressions
3expect: parses
3expect: parses
4expect-types: a partial inference report
4expect-types: a partial inference report
tests/golden/doc-grammar-04-step/source.jibb+5−5
@@ -7,8 +7,8 @@
7
7
8++ describe |= s=step
8++ describe |= s=step
9 ?- s
9 ?- s
10− [%move %left n] "left {n}"
10+ [%move %left n] "left {n}"
11− [%move %right n] "right {n}"
11+ [%move %right n] "right {n}"
12− [t %draft] t
12+ [t %draft] t
13− [t %sent sent-at] t
13+ [t %sent sent-at] t
14− %stop "stop"
14+ %stop "stop"
tests/golden/doc-grammar-04-step/tokens.txt+36−37
@@ -46,40 +46,39 @@
469:3 INDENT
469:3 INDENT
479:3 glyph ?-
479:3 glyph ?-
489:6 name s
489:6 name s
49−10:5 INDENT
49+10:3 NEWLINE
50−10:5 glyph [
50+10:3 glyph [
51−10:6 tight lit %move
51+10:4 tight lit %move
52−10:12 lit %left
52+10:10 lit %left
53−10:18 name n
53+10:16 name n
54+10:17 tight glyph ]
55+10:21 str-head "left "
56+10:28 tight name n
57+10:29 tight str-tail ""
58+11:3 NEWLINE
59+11:3 glyph [
60+11:4 tight lit %move
61+11:10 lit %right
62+11:17 name n
54−10:19 tight glyph ]
63+11:18 tight glyph ]
55−10:23 str-head "left "
64+11:21 str-head "right "
65+11:29 tight name n
56−10:30 tight name n
66+11:30 tight str-tail ""
57−10:31 tight str-tail ""
58−11:5 NEWLINE
59−11:5 glyph [
60−11:6 tight lit %move
61−11:12 lit %right
62−11:19 name n
63−11:20 tight glyph ]
64−11:23 str-head "right "
65−11:31 tight name n
66−11:32 tight str-tail ""
67−12:5 NEWLINE
67+12:3 NEWLINE
68−12:5 glyph [
68+12:3 glyph [
69−12:6 tight name t
69+12:4 tight name t
70−12:8 lit %draft
70+12:6 lit %draft
71−12:14 tight glyph ]
71+12:12 tight glyph ]
72−12:23 name t
72+12:21 name t
73−13:5 NEWLINE
73+13:3 NEWLINE
74−13:5 glyph [
74+13:3 glyph [
75−13:6 tight name t
75+13:4 tight name t
76−13:8 lit %sent
76+13:6 lit %sent
77−13:14 name sent-at
77+13:12 name sent-at
78−13:21 tight glyph ]
78+13:19 tight glyph ]
79−13:23 name t
79+13:21 name t
80−14:5 NEWLINE
80+14:3 NEWLINE
81−14:5 lit %stop
81+14:3 lit %stop
82−14:23 str "stop"
82+14:21 str "stop"
83−14:29 DEDENT
83+14:27 DEDENT
84−14:29 DEDENT
85−14:29 NEWLINE
84+14:27 NEWLINE
tests/golden/doc-grammar-04-step/tree.txt+13−13
@@ -23,16 +23,16 @@
23 (body 9:3
23 (body 9:3
24 (branch 9:3
24 (branch 9:3
25 (wing 9:6 s)
25 (wing 9:6 s)
26− (arm 10:5
26+ (arm 10:3
27− (cell 10:5 (lit 10:6 %move) (lit 10:12 %left) (bind 10:18 n))
27+ (cell 10:3 (lit 10:4 %move) (lit 10:10 %left) (bind 10:16 n))
28− (str 10:23 "left " (wing 10:30 n)))
28+ (str 10:21 "left " (wing 10:28 n)))
29− (arm 11:5
29+ (arm 11:3
30− (cell 11:5 (lit 11:6 %move) (lit 11:12 %right) (bind 11:19 n))
30+ (cell 11:3 (lit 11:4 %move) (lit 11:10 %right) (bind 11:17 n))
31− (str 11:23 "right " (wing 11:31 n)))
31+ (str 11:21 "right " (wing 11:29 n)))
32− (arm 12:5
32+ (arm 12:3
33− (cell 12:5 (bind 12:6 t) (lit 12:8 %draft))
33+ (cell 12:3 (bind 12:4 t) (lit 12:6 %draft))
34− (wing 12:23 t))
34+ (wing 12:21 t))
35− (arm 13:5
35+ (arm 13:3
36− (cell 13:5 (bind 13:6 t) (lit 13:8 %sent) (bind 13:14 sent-at))
36+ (cell 13:3 (bind 13:4 t) (lit 13:6 %sent) (bind 13:12 sent-at))
37− (wing 13:23 t))
37+ (wing 13:21 t))
38− (arm 14:5 (lit 14:5 %stop) (str 14:23 "stop")))))))
38+ (arm 14:3 (lit 14:3 %stop) (str 14:21 "stop")))))))
tests/golden/doc-grammar-06-cart-store/about.txt+1−1
@@ -1,4 +1,4 @@
1source: Grammar tab, section "Example: a store and an island", code block 6 of the tab (block 5 is the EBNF)
1source: Grammar tab, section "Example: a store and an island", code block 6 of the tab (block 5 is the EBNF)
2−tests: a store module: a record mold with a mold application and the loobean mold `?`; a union with its cases below; a mold that is a name; a blank line; `++ main (store init update)`; a cast with its mold and expression on one line, `^- state [~ %.n]`; a gate with a cell sample; `?-` arms whose expressions are changes, `s(items=[item items.s])` and `s(open=(not open.s))`
2+tests: a store module: a record mold with a mold application and the loobean mold `?`; a union with its cases below; a mold that is a name; a blank line; `++ main (store init update)`; a cast with its mold and expression on one line, `^- state [~ %.n]`; a gate with a cell sample; `?-` arms at the `?-`'s depth whose expressions are changes, `s(items=[item items.s])` and `s(open=(not open.s))`
3expect: parses
3expect: parses
4expect-types: a partial inference report; store kind and declaration scope remain unresolved
4expect-types: a partial inference report; store kind and declaration scope remain unresolved
tests/golden/doc-grammar-06-cart-store/tokens.txt+27−28
@@ -60,31 +60,30 @@
6010:3 INDENT
6010:3 INDENT
6110:3 glyph ?-
6110:3 glyph ?-
6210:6 name a
6210:6 name a
63−11:5 INDENT
63+11:3 NEWLINE
64−11:5 glyph [
64+11:3 glyph [
65−11:6 tight lit %add
65+11:4 tight lit %add
66−11:11 name item
66+11:9 name item
67−11:15 tight glyph ]
67+11:13 tight glyph ]
68−11:18 name s
68+11:16 name s
69−11:19 tight glyph (
69+11:17 tight glyph (
70−11:20 tight name items
70+11:18 tight name items
71−11:25 tight glyph =
71+11:23 tight glyph =
72−11:26 tight glyph [
72+11:24 tight glyph [
73−11:27 tight name item
73+11:25 tight name item
74−11:32 wing items.s
75−11:39 tight glyph ]
76−11:40 tight glyph )
77−12:5 NEWLINE
78−12:5 lit %toggle
79−12:18 name s
80−12:19 tight glyph (
81−12:20 tight name open
82−12:24 tight glyph =
83−12:25 tight glyph (
84−12:26 tight name not
85−12:30 wing open.s
74+11:30 wing items.s
86−12:36 tight glyph )
87−12:37 tight glyph )
75+11:37 tight glyph ]
88−12:38 DEDENT
76+11:38 tight glyph )
77+12:3 NEWLINE
78+12:3 lit %toggle
79+12:16 name s
80+12:17 tight glyph (
81+12:18 tight name open
82+12:22 tight glyph =
83+12:23 tight glyph (
84+12:24 tight name not
85+12:28 wing open.s
86+12:34 tight glyph )
87+12:35 tight glyph )
89−12:38 DEDENT
88+12:36 DEDENT
90−12:38 NEWLINE
89+12:36 NEWLINE
tests/golden/doc-grammar-06-cart-store/tree.txt+11−11
@@ -27,14 +27,14 @@
27 (body 10:3
27 (body 10:3
28 (branch 10:3
28 (branch 10:3
29 (wing 10:6 a)
29 (wing 10:6 a)
30− (arm 11:5
30+ (arm 11:3
31− (cell 11:5 (lit 11:6 %add) (bind 11:11 item))
31+ (cell 11:3 (lit 11:4 %add) (bind 11:9 item))
32− (change 11:18 s
32+ (change 11:16 s
33− (edit 11:20 items
33+ (edit 11:18 items
34− (tuple 11:26 (wing 11:27 item) (wing 11:32 items.s)))))
34+ (tuple 11:24 (wing 11:25 item) (wing 11:30 items.s)))))
35− (arm 12:5
35+ (arm 12:3
36− (lit 12:5 %toggle)
36+ (lit 12:3 %toggle)
37− (change 12:18 s
37+ (change 12:16 s
38− (edit 12:20 open
38+ (edit 12:18 open
39− (group 12:25
39+ (group 12:23
40− (call 12:26 (wing 12:26 not) (wing 12:30 open.s)))))))))))
40+ (call 12:24 (wing 12:24 not) (wing 12:28 open.s)))))))))))
tests/golden/doc-grammar-07-basket/about.txt+1−1
@@ -1,3 +1,3 @@
1source: Grammar tab, section "Example: a store and an island", code block 7 of the tab
1source: Grammar tab, section "Example: a store and an island", code block 7 of the tab
2−tests: an island module: a `/=` import; blank lines between definitions; a record mold holding a wing mold `state.cart`; a union with term, faced-cell and mold-application cases; `|= ~` with its body below; a pun sample `=msg`; arms whose expressions are cells holding changes (`m(note="")`), lists of cells, parenthesised calls of wings and constructors (`|=%acked`); `(state.cart |=%got)`; a list left open at the end of its line whose items are a parenthesised call with an interpolated group `{(lent items.cart.m)}` and two unparenthesised calls, one ending in `|=%noted`
2+tests: an island module: a `/=` import; blank lines between definitions; a record mold holding a wing mold `state.cart`; a union with term, faced-cell and mold-application cases; `|= ~` with its body below; a pun sample `=msg`; arms at the `?-`'s depth whose expressions are cells holding changes (`m(note="")`), lists of cells, parenthesised calls of wings and constructors (`|=%acked`); `(state.cart |=%got)`; a list left open at the end of its line whose items are a parenthesised call with an interpolated group `{(lent items.cart.m)}` and two unparenthesised calls, one ending in `|=%noted`
3expect: parses
3expect: parses
tests/golden/doc-grammar-07-basket/tokens.txt+71−72
@@ -95,78 +95,77 @@
9518:3 INDENT
9518:3 INDENT
9618:3 glyph ?-
9618:3 glyph ?-
9718:6 name msg
9718:6 name msg
98−19:5 INDENT
98+19:3 NEWLINE
99−19:5 glyph [
99+19:3 glyph [
100−19:6 tight lit %noted
100+19:4 tight lit %noted
101−19:13 name t
101+19:11 name t
102−19:14 tight glyph ]
102+19:12 tight glyph ]
103−19:20 glyph [
103+19:18 glyph [
104−19:21 tight name m
104+19:19 tight name m
105−19:22 tight glyph (
105+19:20 tight glyph (
106−19:23 tight name note
106+19:21 tight name note
107−19:27 tight glyph =
107+19:25 tight glyph =
108−19:28 tight name t
108+19:26 tight name t
109−19:29 tight glyph )
109+19:27 tight glyph )
110−19:31 lit ~
110+19:29 lit ~
111−19:32 tight glyph ]
111+19:30 tight glyph ]
112−20:5 NEWLINE
112+20:3 NEWLINE
113−20:5 lit %add
113+20:3 lit %add
114−20:20 glyph [
114+20:18 glyph [
115−20:21 tight name m
115+20:19 tight name m
116−20:22 tight glyph (
116+20:20 tight glyph (
117−20:23 tight name note
117+20:21 tight name note
118−20:27 tight glyph =
118+20:25 tight glyph =
119−20:28 tight str ""
119+20:26 tight str ""
120−20:30 tight glyph )
120+20:28 tight glyph )
121−20:32 glyph ~[
121+20:30 glyph ~[
122−20:34 tight glyph (
122+20:32 tight glyph (
123−20:35 tight wing poke.cart
123+20:33 tight wing poke.cart
124−20:45 glyph [
124+20:43 glyph [
125−20:46 tight lit %add
125+20:44 tight lit %add
126−20:51 wing note.m
126+20:49 wing note.m
127+20:55 tight glyph ]
127−20:57 tight glyph ]
128+20:57 glyph |=
129+20:59 tight lit %acked
128−20:59 glyph |=
130+20:65 tight glyph )
129−20:61 tight lit %acked
131+20:66 tight glyph ]
130−20:67 tight glyph )
132+20:67 tight glyph ]
131−20:68 tight glyph ]
132−20:69 tight glyph ]
133−21:5 NEWLINE
133+21:3 NEWLINE
134−21:5 lit %toggle
134+21:3 lit %toggle
135−21:20 glyph [
135+21:18 glyph [
136−21:21 tight name m
136+21:19 tight name m
137−21:23 glyph ~[
137+21:21 glyph ~[
138−21:25 tight glyph (
138+21:23 tight glyph (
139−21:26 tight wing poke.cart
139+21:24 tight wing poke.cart
140−21:36 lit %toggle
140+21:34 lit %toggle
141−21:44 glyph |=
141+21:42 glyph |=
142−21:46 tight lit %acked
142+21:44 tight lit %acked
143+21:50 tight glyph )
144+21:51 tight glyph ]
143−21:52 tight glyph )
145+21:52 tight glyph ]
144−21:53 tight glyph ]
145−21:54 tight glyph ]
146−22:5 NEWLINE
146+22:3 NEWLINE
147−22:5 glyph [
147+22:3 glyph [
148−22:6 tight lit %got
148+22:4 tight lit %got
149−22:11 name c
149+22:9 name c
150−22:12 tight glyph ]
150+22:10 tight glyph ]
151−22:20 glyph [
151+22:18 glyph [
152−22:21 tight name m
152+22:19 tight name m
153−22:22 tight glyph (
153+22:20 tight glyph (
154−22:23 tight name cart
154+22:21 tight name cart
155−22:27 tight glyph =
155+22:25 tight glyph =
156−22:28 tight name c
156+22:26 tight name c
157−22:29 tight glyph )
157+22:27 tight glyph )
158−22:31 lit ~
158+22:29 lit ~
159−22:32 tight glyph ]
159+22:30 tight glyph ]
160−23:5 NEWLINE
160+23:3 NEWLINE
161−23:5 glyph [
161+23:3 glyph [
162−23:6 tight lit %acked
162+23:4 tight lit %acked
163−23:13 name err
163+23:11 name err
164−23:16 tight glyph ]
164+23:14 tight glyph ]
165−23:20 glyph [
165+23:18 glyph [
166−23:21 tight name m
166+23:19 tight name m
167−23:23 lit ~
167+23:21 lit ~
168−23:24 tight glyph ]
168+23:22 tight glyph ]
169−25:1 DEDENT
17025:1 DEDENT
16925:1 DEDENT
17125:1 NEWLINE
17025:1 NEWLINE
17225:1 glyph ++
17125:1 glyph ++
tests/golden/doc-grammar-07-basket/tree.txt+33−33
@@ -39,39 +39,39 @@
39 (body 18:3
39 (body 18:3
40 (branch 18:3
40 (branch 18:3
41 (wing 18:6 msg)
41 (wing 18:6 msg)
42− (arm 19:5
42+ (arm 19:3
43− (cell 19:5 (lit 19:6 %noted) (bind 19:13 t))
43+ (cell 19:3 (lit 19:4 %noted) (bind 19:11 t))
44− (tuple 19:20
44+ (tuple 19:18
45− (change 19:21 m
45+ (change 19:19 m
46− (edit 19:23 note (wing 19:28 t)))
46+ (edit 19:21 note (wing 19:26 t)))
47− (lit 19:31 ~)))
47+ (lit 19:29 ~)))
48− (arm 20:5
48+ (arm 20:3
49− (lit 20:5 %add)
49+ (lit 20:3 %add)
50− (tuple 20:20
50+ (tuple 20:18
51− (change 20:21 m
51+ (change 20:19 m
52− (edit 20:23 note (str 20:28 "")))
52+ (edit 20:21 note (str 20:26 "")))
53− (list 20:32
53+ (list 20:30
54− (group 20:34
54+ (group 20:32
55− (call 20:35
55+ (call 20:33
56− (wing 20:35 poke.cart)
56+ (wing 20:33 poke.cart)
57− (tuple 20:45 (lit 20:46 %add) (wing 20:51 note.m))
57+ (tuple 20:43 (lit 20:44 %add) (wing 20:49 note.m))
58− (ctor 20:59 %acked))))))
58+ (ctor 20:57 %acked))))))
59− (arm 21:5
60− (lit 21:5 %toggle)
61− (tuple 21:20
62− (wing 21:21 m)
63− (list 21:23
64− (group 21:25
65− (call 21:26 (wing 21:26 poke.cart) (lit 21:36 %toggle) (ctor 21:44 %acked))))))
66− (arm 22:5
59+ (arm 21:3
60+ (lit 21:3 %toggle)
61+ (tuple 21:18
62+ (wing 21:19 m)
63+ (list 21:21
64+ (group 21:23
65+ (call 21:24 (wing 21:24 poke.cart) (lit 21:34 %toggle) (ctor 21:42 %acked))))))
66+ (arm 22:3
67− (cell 22:5 (lit 22:6 %got) (bind 22:11 c))
67+ (cell 22:3 (lit 22:4 %got) (bind 22:9 c))
68− (tuple 22:20
68+ (tuple 22:18
69− (change 22:21 m
69+ (change 22:19 m
70− (edit 22:23 cart (wing 22:28 c)))
70+ (edit 22:21 cart (wing 22:26 c)))
71− (lit 22:31 ~)))
71+ (lit 22:29 ~)))
72− (arm 23:5
72+ (arm 23:3
73− (cell 23:5 (lit 23:6 %acked) (bind 23:13 err))
73+ (cell 23:3 (lit 23:4 %acked) (bind 23:11 err))
74− (tuple 23:20 (wing 23:21 m) (lit 23:23 ~)))))))
74+ (tuple 23:18 (wing 23:19 m) (lit 23:21 ~)))))))
75 (value 25:1 subs
75 (value 25:1 subs
76 (gate 25:9
76 (gate 25:9
77 (face 25:12 m (ref 25:14 model))
77 (face 25:12 m (ref 25:14 model))
tests/golden/doc-overview-10-todo-list/about.txt+1−1
@@ -1,3 +1,3 @@
1source: the first tab ("Jibb — an Elm-architecture UI language for Urbit"), section "Worked examples", 3. Interactive: /ui/todo-list.jibb, code block 10 of the tab
1source: the first tab ("Jibb — an Elm-architecture UI language for Urbit"), section "Worked examples", 3. Interactive: /ui/todo-list.jibb, code block 10 of the tab
2−tests: the interactive island: a record mold with mold applications; a five-case union; a gate with its body below; a `?-` arm whose body is on the deeper lines, a nested `?-` on a deeply nested call with loobean arms; changes holding a unit of a string (`` error=`"Too long" ``) and a null; arms aligned with extra spaces; lists of cells holding constructors; a list left open inside another open list (`row ~[gap+%s1] ~[`); a pair whose operand is a cell; calls ending in `|=%typed`; a gate whose body is a cell holding a call with a cell argument
2+tests: the interactive island: a record mold with mold applications; a five-case union; a gate with its body below; a `?-` with its arms at its own depth, one arm's body on the deeper lines, a nested `?-` on a deeply nested call with loobean arms at its depth; changes holding a unit of a string (`` error=`"Too long" ``) and a null; arms aligned with extra spaces; lists of cells holding constructors; a list left open inside another open list (`row ~[gap+%s1] ~[`); a pair whose operand is a cell; calls ending in `|=%typed`; a gate whose body is a cell holding a call with a cell argument
3expect: parses
3expect: parses
tests/golden/doc-overview-10-todo-list/tokens.txt+118−120
@@ -113,127 +113,125 @@
11317:3 INDENT
11317:3 INDENT
11417:3 glyph ?-
11417:3 glyph ?-
11517:6 name msg
11517:6 name msg
116−18:5 INDENT
116+18:3 NEWLINE
117−18:5 glyph [
117+18:3 glyph [
118−18:6 tight lit %typed
118+18:4 tight lit %typed
119−18:13 name t
119+18:11 name t
120−18:14 tight glyph ]
120+18:12 tight glyph ]
121−19:7 INDENT
121+19:5 INDENT
122−19:7 glyph ?-
122+19:5 glyph ?-
123−19:10 glyph (
123+19:8 glyph (
124−19:11 tight name gth
124+19:9 tight name gth
125−19:15 glyph (
125+19:13 glyph (
126−19:16 tight name lent
126+19:14 tight name lent
127−19:21 glyph (
127+19:19 glyph (
128−19:22 tight name tuba
128+19:20 tight name tuba
129−19:27 glyph (
129+19:25 glyph (
130−19:28 tight name trip
130+19:26 tight name trip
131−19:33 name t
131+19:31 name t
132+19:32 tight glyph )
133+19:33 tight glyph )
13219:34 tight glyph )
13419:34 tight glyph )
133−19:35 tight glyph )
134−19:36 tight glyph )
135−19:38 lit 80
135+19:36 lit 80
136−19:40 tight glyph )
136+19:38 tight glyph )
137−20:9 INDENT
137+20:5 NEWLINE
138−20:9 lit %.y
138+20:5 lit %.y
139−20:14 glyph [
139+20:10 glyph [
140−20:15 tight name m
140+20:11 tight name m
141−20:16 tight glyph (
141+20:12 tight glyph (
142−20:17 tight name draft
142+20:13 tight name draft
143−20:22 tight glyph =
143+20:18 tight glyph =
144−20:23 tight name t
144+20:19 tight name t
145−20:25 name error
145+20:21 name error
146−20:30 tight glyph =
146+20:26 tight glyph =
147−20:31 tight glyph `
147+20:27 tight glyph `
148−20:32 tight str "Too long"
148+20:28 tight str "Too long"
149−20:42 tight glyph )
149+20:38 tight glyph )
150−20:44 lit ~
150+20:40 lit ~
151−20:45 tight glyph ]
151+20:41 tight glyph ]
152−21:9 NEWLINE
152+21:5 NEWLINE
153−21:9 lit %.n
153+21:5 lit %.n
154−21:14 glyph [
154+21:10 glyph [
155−21:15 tight name m
155+21:11 tight name m
156−21:16 tight glyph (
156+21:12 tight glyph (
157−21:17 tight name draft
157+21:13 tight name draft
158−21:22 tight glyph =
158+21:18 tight glyph =
159−21:23 tight name t
159+21:19 tight name t
160−21:25 name error
160+21:21 name error
161−21:30 tight glyph =
161+21:26 tight glyph =
162−21:31 tight lit ~
162+21:27 tight lit ~
163−21:32 tight glyph )
163+21:28 tight glyph )
164−21:34 lit ~
164+21:30 lit ~
165−21:35 tight glyph ]
165+21:31 tight glyph ]
166−22:5 DEDENT
166+22:3 DEDENT
167−22:5 DEDENT
168−22:5 NEWLINE
167+22:3 NEWLINE
169−22:5 lit %submit
168+22:3 lit %submit
170−22:20 glyph [
169+22:18 glyph [
171−22:21 tight name m
170+22:19 tight name m
172−22:22 tight glyph (
171+22:20 tight glyph (
173−22:23 tight name draft
172+22:21 tight name draft
174−22:28 tight glyph =
173+22:26 tight glyph =
175−22:29 tight str ""
174+22:27 tight str ""
176−22:31 tight glyph )
175+22:29 tight glyph )
177−22:33 glyph ~[
176+22:31 glyph ~[
178−22:35 tight glyph (
177+22:33 tight glyph (
179−22:36 tight wing poke.todo
178+22:34 tight wing poke.todo
180−22:46 glyph [
179+22:44 glyph [
181−22:47 tight lit %add
180+22:45 tight lit %add
182−22:52 wing draft.m
181+22:50 wing draft.m
183−22:59 tight glyph ]
182+22:57 tight glyph ]
183+22:59 glyph |=
184+22:61 tight lit %acked
184−22:61 glyph |=
185+22:67 tight glyph )
185−22:63 tight lit %acked
186+22:68 tight glyph ]
186−22:69 tight glyph )
187+22:69 tight glyph ]
187−22:70 tight glyph ]
188−22:71 tight glyph ]
189−23:5 NEWLINE
188+23:3 NEWLINE
190−23:5 glyph [
189+23:3 glyph [
191−23:6 tight lit %toggled
190+23:4 tight lit %toggled
192−23:15 name id
191+23:13 name id
193−23:17 tight glyph ]
192+23:15 tight glyph ]
194−23:20 glyph [
193+23:18 glyph [
195−23:21 tight name m
194+23:19 tight name m
196−23:23 glyph ~[
195+23:21 glyph ~[
197−23:25 tight glyph (
196+23:23 tight glyph (
198−23:26 tight wing poke.todo
197+23:24 tight wing poke.todo
199−23:36 glyph [
198+23:34 glyph [
200−23:37 tight lit %toggle
199+23:35 tight lit %toggle
201−23:45 name id
200+23:43 name id
202−23:47 tight glyph ]
201+23:45 tight glyph ]
203−23:49 glyph |=
202+23:47 glyph |=
204−23:51 tight lit %acked
203+23:49 tight lit %acked
205−23:57 tight glyph )
204+23:55 tight glyph )
206−23:58 tight glyph ]
205+23:56 tight glyph ]
207−23:59 tight glyph ]
206+23:57 tight glyph ]
208−24:5 NEWLINE
207+24:3 NEWLINE
209−24:5 glyph [
208+24:3 glyph [
210−24:6 tight lit %got
209+24:4 tight lit %got
211−24:11 name ts
210+24:9 name ts
212−24:13 tight glyph ]
211+24:11 tight glyph ]
213−24:20 glyph [
212+24:18 glyph [
214−24:21 tight name m
213+24:19 tight name m
215−24:22 tight glyph (
214+24:20 tight glyph (
216−24:23 tight name todos
215+24:21 tight name todos
217−24:28 tight glyph =
216+24:26 tight glyph =
218−24:29 tight name ts
217+24:27 tight name ts
219−24:31 tight glyph )
218+24:29 tight glyph )
220−24:33 lit ~
219+24:31 lit ~
221−24:34 tight glyph ]
220+24:32 tight glyph ]
222−25:5 NEWLINE
221+25:3 NEWLINE
223−25:5 glyph [
222+25:3 glyph [
224−25:6 tight lit %acked
223+25:4 tight lit %acked
225−25:13 name err
224+25:11 name err
226−25:16 tight glyph ]
225+25:14 tight glyph ]
227−25:20 glyph [
226+25:18 glyph [
228−25:21 tight name m
227+25:19 tight name m
229−25:22 tight glyph (
228+25:20 tight glyph (
230−25:23 tight name error
229+25:21 tight name error
231−25:28 tight glyph =
230+25:26 tight glyph =
232−25:29 tight name err
231+25:27 tight name err
233−25:32 tight glyph )
232+25:30 tight glyph )
234−25:34 lit ~
233+25:32 lit ~
235−25:35 tight glyph ]
234+25:33 tight glyph ]
236−27:1 DEDENT
23727:1 DEDENT
23527:1 DEDENT
23827:1 NEWLINE
23627:1 NEWLINE
23927:1 glyph ++
23727:1 glyph ++
tests/golden/doc-overview-10-todo-list/tree.txt+64−64
@@ -44,70 +44,70 @@
44 (body 17:3
44 (body 17:3
45 (branch 17:3
45 (branch 17:3
46 (wing 17:6 msg)
46 (wing 17:6 msg)
47− (arm 18:5
47+ (arm 18:3
48− (cell 18:5 (lit 18:6 %typed) (bind 18:13 t))
48+ (cell 18:3 (lit 18:4 %typed) (bind 18:11 t))
49− (body 19:7
49+ (body 19:5
50− (branch 19:7
50+ (branch 19:5
51− (group 19:10
51+ (group 19:8
52− (call 19:11
52+ (call 19:9
53− (wing 19:11 gth)
53+ (wing 19:9 gth)
54− (group 19:15
54+ (group 19:13
55− (call 19:16
55+ (call 19:14
56− (wing 19:16 lent)
56+ (wing 19:14 lent)
57− (group 19:21
57+ (group 19:19
58− (call 19:22
58+ (call 19:20
59− (wing 19:22 tuba)
59+ (wing 19:20 tuba)
60− (group 19:27
60+ (group 19:25
61− (call 19:28 (wing 19:28 trip) (wing 19:33 t)))))))
61+ (call 19:26 (wing 19:26 trip) (wing 19:31 t)))))))
62− (lit 19:38 80)))
62+ (lit 19:36 80)))
63− (arm 20:9
63+ (arm 20:5
64− (lit 20:9 %.y)
64+ (lit 20:5 %.y)
65− (tuple 20:14
65+ (tuple 20:10
66− (change 20:15 m
66+ (change 20:11 m
67− (edit 20:17 draft (wing 20:23 t))
67+ (edit 20:13 draft (wing 20:19 t))
68− (edit 20:25 error
68+ (edit 20:21 error
69− (unit 20:31 (str 20:32 "Too long"))))
69+ (unit 20:27 (str 20:28 "Too long"))))
70− (lit 20:44 ~)))
70+ (lit 20:40 ~)))
71− (arm 21:9
71+ (arm 21:5
72− (lit 21:9 %.n)
72+ (lit 21:5 %.n)
73− (tuple 21:14
73+ (tuple 21:10
74− (change 21:15 m
74+ (change 21:11 m
75− (edit 21:17 draft (wing 21:23 t))
75+ (edit 21:13 draft (wing 21:19 t))
76− (edit 21:25 error (lit 21:31 ~)))
76+ (edit 21:21 error (lit 21:27 ~)))
77− (lit 21:34 ~))))))
77+ (lit 21:30 ~))))))
78− (arm 22:5
78+ (arm 22:3
79− (lit 22:5 %submit)
79+ (lit 22:3 %submit)
80− (tuple 22:20
80+ (tuple 22:18
81− (change 22:21 m
81+ (change 22:19 m
82− (edit 22:23 draft (str 22:29 "")))
82+ (edit 22:21 draft (str 22:27 "")))
83− (list 22:33
83+ (list 22:31
84− (group 22:35
84+ (group 22:33
85− (call 22:36
85+ (call 22:34
86− (wing 22:36 poke.todo)
86+ (wing 22:34 poke.todo)
87− (tuple 22:46 (lit 22:47 %add) (wing 22:52 draft.m))
87+ (tuple 22:44 (lit 22:45 %add) (wing 22:50 draft.m))
88− (ctor 22:61 %acked))))))
88+ (ctor 22:59 %acked))))))
89− (arm 23:5
89+ (arm 23:3
90− (cell 23:5 (lit 23:6 %toggled) (bind 23:15 id))
90+ (cell 23:3 (lit 23:4 %toggled) (bind 23:13 id))
91− (tuple 23:20
91+ (tuple 23:18
92− (wing 23:21 m)
92+ (wing 23:19 m)
93− (list 23:23
93+ (list 23:21
94− (group 23:25
94+ (group 23:23
95− (call 23:26
95+ (call 23:24
96− (wing 23:26 poke.todo)
96+ (wing 23:24 poke.todo)
97− (tuple 23:36 (lit 23:37 %toggle) (wing 23:45 id))
97+ (tuple 23:34 (lit 23:35 %toggle) (wing 23:43 id))
98− (ctor 23:49 %acked))))))
98+ (ctor 23:47 %acked))))))
99− (arm 24:5
99+ (arm 24:3
100− (cell 24:5 (lit 24:6 %got) (bind 24:11 ts))
100+ (cell 24:3 (lit 24:4 %got) (bind 24:9 ts))
101− (tuple 24:20
101+ (tuple 24:18
102− (change 24:21 m
102+ (change 24:19 m
103− (edit 24:23 todos (wing 24:29 ts)))
103+ (edit 24:21 todos (wing 24:27 ts)))
104− (lit 24:33 ~)))
104+ (lit 24:31 ~)))
105− (arm 25:5
105+ (arm 25:3
106− (cell 25:5 (lit 25:6 %acked) (bind 25:13 err))
106+ (cell 25:3 (lit 25:4 %acked) (bind 25:11 err))
107− (tuple 25:20
107+ (tuple 25:18
108− (change 25:21 m
108+ (change 25:19 m
109− (edit 25:23 error (wing 25:29 err)))
109+ (edit 25:21 error (wing 25:27 err)))
110− (lit 25:34 ~)))))))
110+ (lit 25:32 ~)))))))
111 (value 27:1 subs
111 (value 27:1 subs
112 (gate 27:9
112 (gate 27:9
113 (face 27:12 m (ref 27:14 model))
113 (face 27:12 m (ref 27:14 model))