on master help sign in
.
commit33c145deb38e982579a120473008c0c9107cea55 authoriko <mail@iko.soy> dateSat 11 May 2024, 18:46 (2 years ago) parentddbc13f
16 files changed+964
.gitignore+5 zod/luau/lib/interlist.hoon+32 zod/luau/lib/lua.hoon+384 zod/luau/mar/atom.hoon+18 zod/luau/mar/bill.hoon+34 zod/luau/mar/docket-0.hoon+25 zod/luau/mar/hoon.hoon+49 zod/luau/mar/kelvin.hoon+28 zod/luau/mar/lua.hoon+20 zod/luau/mar/mime.hoon+32 zod/luau/mar/noun.hoon+22 zod/luau/mar/ship.hoon+20 zod/luau/mar/txt.hoon+275 zod/luau/sys.kelvin+1 zod/luau/tests/foo.lua+10 zod/luau/tmp.hoon+9
.gitignorenew file+5
@@ -0,0 +1,5 @@
1+zod/.bin
2+zod/.http.ports
3+zod/.run
4+zod/.urb
5+zod/.vere.lock
zod/luau/lib/interlist.hoonnew file+32
@@ -0,0 +1,32 @@
1+=<
2+|%
3+++ interlist
4+ |$ [sep val]
5+ $%
6+ [%double =val =sep tail=(interlist sep val)]
7+ [%single =val]
8+ ==
9+++ parse-interlist
10+ |* [s=rule v=rule]
11+ =/ val (rule-type v)
12+ =/ sep (rule-type s)
13+ %+ cook
14+ |* [v=* rest=(list [* *])]
15+ ^- (interlist sep val)
16+ =/ rrest (flop rest)
17+ ?~ rrest [%single v]
18+ =/ tail
19+ %+ roll t.rrest
20+ |* [[s=* v=*] _[acc=`(interlist sep val)`[%single +.i.rrest] last-sep=-.i.rrest]]
21+ [[%double v last-sep acc] s]
22+ [%double v +.tail -.tail]
23+ ;~(plug v (star ;~(plug s v)))
24+--
25+|%
26+++ rule-type
27+ |* =rule
28+ $_
29+ =/ ret q:$:rule
30+ ?> ?=(^ ret)
31+ p.u.ret
32+--
zod/luau/lib/lua.hoonnew file+384
@@ -0,0 +1,384 @@
1+/+ *interlist
2+|%
3+:: Name
4+::
5++$ name @t
6+:: AST
7+::
8++$ ast
9+ $%
10+ [%blok blok]
11+ ==
12+++ print
13+ |= [=ast]
14+ ^- tape
15+ ?- -.ast
16+ %blok (print-blok +.ast)
17+ ==
18+++ apex
19+ %+ knee *ast
20+ |.
21+ %+ ifix [gaw gaw]
22+ ;~ pose
23+ (cook |=(=blok [%blok blok]) parse-blok)
24+ ==
25+:: Expr
26+::
27++$ expr
28+ $%
29+ :: [%string ~]
30+ [%binop expr binop expr]
31+ [%prefix-expr prefix-expr]
32+ [%num numeral]
33+ [%true ~]
34+ [%false ~]
35+ [%nil ~]
36+ ==
37+++ parse-atomic-expr
38+ %+ knee *expr
39+ |.
40+ ;~ pose
41+ (cold [%nil ~] (jest 'nil'))
42+ ::
43+ (cold [%true ~] (jest 'true'))
44+ ::
45+ (cold [%false ~] (jest 'false'))
46+ ::
47+ %+ cook
48+ |=(=numeral [%num numeral])
49+ parse-numeral
50+ ::
51+ %+ cook
52+ |=(=prefix-expr [%prefix-expr prefix-expr])
53+ (knee *prefix-expr |.(parse-prefix-expr))
54+ ==
55+++ parse-expr-list
56+ %+ knee *(interlist binop expr)
57+ |.
58+ %+ parse-interlist parse-binop parse-atomic-expr
59+:: TODO: This is mock and should take operator priority into account.
60+++ process-expr-list
61+ |= l=(interlist binop expr)
62+ ^- expr
63+ ?- -.l
64+ %single val.l
65+ %double [%binop val.l sep.l (process-expr-list tail.l)]
66+ ==
67+++ parse-expr
68+ %+ knee *expr
69+ |.
70+ %+ cook process-expr-list parse-expr-list
71+++ print-expr
72+ |= [=expr]
73+ ^- tape
74+ ?- -.expr
75+ %prefix-expr (print-prefix-expr +.expr)
76+ %nil "nil"
77+ %true "true"
78+ %false "false"
79+ %binop
80+ %- zing
81+ :~
82+ (print-expr +<.expr)
83+ " "
84+ (print-binop +>-.expr)
85+ " "
86+ (print-expr +>+.expr)
87+ ==
88+ %num (print-numeral +.expr)
89+ ==
90+:: binop
91+::
92++$ binop
93+ $?
94+ %add
95+ %sub
96+ %mul
97+ %div
98+ %int-div
99+ %pow
100+ %mod
101+ %band
102+ %bor
103+ %bxor
104+ %rshft
105+ %lshft
106+ %and
107+ %or
108+ %lt
109+ %lteq
110+ %eq
111+ %gt
112+ %gteq
113+ %neq
114+ %concat
115+ ==
116+++ print-binop
117+ |= [=binop]
118+ ?- binop
119+ %add "+"
120+ %sub "-"
121+ %mul "*"
122+ %div "/"
123+ %int-div "//"
124+ %pow "^"
125+ %mod "%"
126+ %band "&"
127+ %bor "|"
128+ %bxor "~"
129+ %rshft ">>"
130+ %lshft "<<"
131+ %and "and"
132+ %or "or"
133+ %lt "<"
134+ %lteq "<="
135+ %eq "=="
136+ %gt ">"
137+ %gteq ">="
138+ %neq "~="
139+ %concat ".."
140+ ==
141+++ parse-binop
142+ %+ knee *binop
143+ |.
144+ ;~ pose
145+ (cold %add (jest '+'))
146+ (cold %sub (jest '-'))
147+ (cold %mul (jest '*'))
148+ (cold %div (jest '/'))
149+ (cold %int-div (jest '//'))
150+ (cold %pow (jest '^'))
151+ (cold %mod (jest '%'))
152+ (cold %band (jest '&'))
153+ (cold %bor (jest '|'))
154+ (cold %bxor (jest '~'))
155+ (cold %rshft (jest '>>'))
156+ (cold %lshft (jest '<<'))
157+ (cold %and (jest 'and'))
158+ (cold %or (jest 'or'))
159+ (cold %lt (jest '<'))
160+ (cold %lteq (jest '<='))
161+ (cold %eq (jest '=='))
162+ (cold %gt (jest '>'))
163+ (cold %gteq (jest '>='))
164+ (cold %neq (jest '~='))
165+ (cold %concat (jest '..'))
166+ ==
167+:: numeral
168+::
169++$ numeral
170+ $%
171+ [%int @s]
172+ :: [%float @rd]
173+ ==
174+++ parse-numeral
175+ %+ knee *numeral
176+ |.
177+ ;~ pose
178+ %+ cook
179+ |= [is-neg=(unit *) x=@]
180+ [%int (new:si ?=(~ is-neg) x)]
181+ ;~ plug
182+ (punt (just '-'))
183+ (bass 10 (plus dit))
184+ ==
185+ ==
186+++ print-numeral
187+ |= [num=numeral]
188+ ^- tape
189+ ?- -.num
190+ %int (show-s +.num)
191+ ==
192+:: exprlist
193+::
194++$ exprlist (lest expr)
195+++ print-exprlist
196+ |= [=exprlist]
197+ %- commaed
198+ %+ turn exprlist print-expr
199+++ parse-exprlist
200+ %+ knee *exprlist
201+ |.
202+ ;~ (glue gaw)
203+ parse-expr
204+ ::
205+ %- star
206+ %+ cook |=([* =expr] expr)
207+ ;~ (glue gaw)
208+ (just ',')
209+ parse-expr
210+ ==
211+ ==
212+:: Var
213+::
214++$ var
215+ $%
216+ [%indexed prefix-expr expr]
217+ [%name name]
218+ ==
219+++ print-var
220+ |= [=var]
221+ ^- tape
222+ ?- -.var
223+ %name (trip +.var)
224+ %indexed
225+ %- zing
226+ :~
227+ (print-prefix-expr +<.var)
228+ "["
229+ (print-expr +>.var)
230+ "]"
231+ ==
232+ ==
233+++ parse-var
234+ %+ knee *var
235+ |.
236+ ;~ pose
237+ %+ cook
238+ |=([=name * =expr *] [%indexed [%var [%name name]] expr])
239+ ;~ (glue gaw)
240+ parse-name
241+ (just '[')
242+ parse-expr
243+ (just ']')
244+ ==
245+ ::
246+ (cook |=(=name [%name name]) parse-name)
247+ ==
248+:: varlist
249+::
250++$ varlist (lest var)
251+++ print-varlist
252+ |= [=varlist]
253+ %- commaed
254+ %+ turn varlist print-var
255+++ parse-varlist
256+ %+ knee *varlist
257+ |.
258+ ;~ (glue gaw)
259+ parse-var
260+ ::
261+ %- star
262+ %+ cook |=([* =var] var)
263+ ;~ (glue gaw)
264+ (just ',')
265+ parse-var
266+ ==
267+ ==
268+:: Prefix Expr
269+::
270++$ prefix-expr
271+ $%
272+ [%expr expr]
273+ [%var var]
274+ ==
275+++ parse-prefix-expr
276+ %+ knee *prefix-expr
277+ |.
278+ ;~ pose
279+ %+ cook
280+ |=([=expr] [%expr expr])
281+ (ifix [(just '(') (just ')')] (knee *expr |.(parse-expr)))
282+ ::
283+ %+ cook
284+ |=([=var] [%var var])
285+ (knee *var |.(parse-var))
286+ ==
287+++ print-prefix-expr
288+ |= [=prefix-expr]
289+ ?- -.prefix-expr
290+ %var (print-var +.prefix-expr)
291+ %expr
292+ %- zing
293+ :~
294+ "("
295+ (print-expr +.prefix-expr)
296+ ")"
297+ ==
298+ ==
299+:: stat
300+::
301++$ stat
302+ $%
303+ [%blok blok]
304+ [%asmnt varlist exprlist]
305+ [%empty ~]
306+ ==
307+++ parse-stat
308+ %+ knee *stat
309+ |.
310+ ;~ pose
311+ (cold [%empty ~] (just ';'))
312+ ::
313+ %+ cook
314+ |=([* =blok *] [%blok blok])
315+ ;~ (glue gawn)
316+ (jest 'do')
317+ (knee *blok |.(parse-blok))
318+ (jest 'end')
319+ ==
320+ ::
321+ %+ cook
322+ |=([=varlist * =exprlist] [%asmnt varlist exprlist])
323+ ;~ (glue gaw)
324+ parse-varlist
325+ (just '=')
326+ parse-exprlist
327+ ==
328+ ==
329+++ print-stat
330+ |= [=stat]
331+ ^- tape
332+ ?- -.stat
333+ %empty ";"
334+ %blok (print-blok +.stat)
335+ %asmnt
336+ %- zing
337+ :~
338+ (commaed (turn +<.stat print-var))
339+ "="
340+ (commaed (turn +>.stat print-expr))
341+ ==
342+ ==
343+:: Blok
344+::
345++$ blok (lest stat)
346+++ print-blok
347+ |= [=blok]
348+ ^- tape
349+ %- zing
350+ %+ join "\0a"
351+ (turn blok print-stat)
352+++ parse-blok
353+ %+ knee *blok
354+ |.
355+ (plus parse-stat)
356+:: Helpers
357+::
358+++ commaed
359+ |= [l=(list tape)]
360+ ^- tape
361+ %- zing
362+ %+ join "," l
363+++ gawn (cold ~ (plus ;~(pose vul gah)))
364+++ parse-name
365+ %+ knee *name
366+ |.
367+ =>
368+ |%
369+ ++ name-char ;~(pose name-fst-char dit:ab)
370+ ++ name-fst-char ;~(pose alf:ab (just '_'))
371+ --
372+ %+ cook
373+ |= =tape (crip tape)
374+ ;~(plug name-fst-char (star name-char))
375+++ show-s
376+ |=(s=@s `tape`[?:((syn:si s) %$ '-') (slag 2 (scow %ui (abs:si s)))])
377+++ bind
378+ |* =mold
379+ |* [prev=rule cont=$-(mold rule)]
380+ |= =nail
381+ =/ prev-edge (prev nail)
382+ ?~ q.prev-edge prev-edge
383+ ((cont p.u.q.prev-edge) q.u.q.prev-edge)
384+--
zod/luau/mar/atom.hoonnew file+18
@@ -0,0 +1,18 @@
1+::
2+:::: /hoon/atom/mar
3+ ::
4+/? 310
5+::
6+:::: A minimal atom mark
7+ ::
8+=, mimes:html
9+|_ ato=@
10+++ grab |%
11+ ++ noun @
12+ ++ mime |=([* p=octs] q.p)
13+ --
14+++ grow |%
15+ ++ mime [/application/x-urb-unknown (as-octs ato)]
16+ --
17+++ grad %mime
18+--
zod/luau/mar/bill.hoonnew file+34
@@ -0,0 +1,34 @@
1+|_ bil=(list dude:gall)
2+++ grow
3+ |%
4+ ++ mime `^mime`[/text/x-bill (as-octs:mimes:html hoon)]
5+ ++ noun bil
6+ ++ hoon
7+ ^- @t
8+ |^ (crip (of-wall:format (wrap-lines (spit-duz bil))))
9+ ::
10+ ++ wrap-lines
11+ |= taz=wall
12+ ^- wall
13+ ?~ taz ["~"]~
14+ :- (weld ":~ " i.taz)
15+ %- snoc :_ "=="
16+ (turn t.taz |=(t=tape (weld " " t)))
17+ ::
18+ ++ spit-duz
19+ |= duz=(list dude:gall)
20+ ^- wall
21+ (turn duz |=(=dude:gall ['%' (trip dude)]))
22+ --
23+ ++ txt (to-wain:format hoon)
24+ --
25+++ grab
26+ |%
27+ ++ noun (list dude:gall)
28+ ++ mime
29+ |= [=mite len=@ud tex=@]
30+ ~_ tex
31+ !<((list dude:gall) (slap !>(~) (ream tex)))
32+ --
33+++ grad %noun
34+--
zod/luau/mar/docket-0.hoonnew file+25
@@ -0,0 +1,25 @@
1+/+ dock=docket
2+|_ =docket:dock
3+++ grow
4+ |%
5+ ++ mime
6+ ^- ^mime
7+ [/text/x-docket (as-octt:mimes:html (spit-docket:mime:dock docket))]
8+ ++ noun docket
9+ ++ json (docket:enjs:dock docket)
10+ --
11+++ grab
12+ |%
13+ ::
14+ ++ mime
15+ |= [=mite len=@ud tex=@]
16+ ^- docket:dock
17+ %- need
18+ %- from-clauses:mime:dock
19+ !<((list clause:dock) (slap !>(~) (ream tex)))
20+
21+ ::
22+ ++ noun docket:dock
23+ --
24+++ grad %noun
25+--
zod/luau/mar/hoon.hoonnew file+49
@@ -0,0 +1,49 @@
1+:::: /hoon/hoon/mar
2+ ::
3+/? 310
4+::
5+=, eyre
6+|_ own=@t
7+::
8+++ grow :: convert to
9+ |%
10+ ++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime
11+ ++ elem :: convert to %html
12+ ;div:pre(urb_codemirror "", mode "hoon"):"{(trip own)}"
13+ :: =+ gen-id="src-{<`@ui`(mug own)>}"
14+ :: ;div
15+ :: ;textarea(id "{gen-id}"):"{(trip own)}"
16+ :: ;script:"""
17+ :: CodeMirror.fromTextArea(
18+ :: window[{<gen-id>}],
19+ :: \{lineNumbers:true, readOnly:true}
20+ :: )
21+ :: """
22+ :: ==
23+ ++ hymn
24+ :: ;html:(head:title:"Source" "+{elem}")
25+ ;html
26+ ;head
27+ ;title:"Source"
28+ ;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js";
29+ ;script@"/lib/syntax/hoon.js";
30+ ;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/".
31+ "codemirror/4.3.0/codemirror.min.css");
32+ ;link/"/lib/syntax/codemirror.css"(rel "stylesheet");
33+ ==
34+ ;body
35+ ;textarea#src:"{(trip own)}"
36+ ;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})'
37+ ==
38+ ==
39+ ++ txt
40+ (to-wain:format own)
41+ --
42+++ grab
43+ |% :: convert from
44+ ++ mime |=([p=mite q=octs] q.q)
45+ ++ noun @t :: clam from %noun
46+ ++ txt of-wain:format
47+ --
48+++ grad %txt
49+--
zod/luau/mar/kelvin.hoonnew file+28
@@ -0,0 +1,28 @@
1+|_ kal=waft:clay
2+++ grow
3+ |%
4+ ++ mime `^mime`[/text/x-kelvin (as-octs:mimes:html hoon)]
5+ ++ noun kal
6+ ++ hoon
7+ %+ rap 3
8+ %+ turn
9+ %+ sort
10+ ~(tap in (waft-to-wefts:clay kal))
11+ |= [a=weft b=weft]
12+ ?: =(lal.a lal.b)
13+ (gte num.a num.b)
14+ (gte lal.a lal.b)
15+ |= =weft
16+ (rap 3 '[%' (scot %tas lal.weft) ' ' (scot %ud num.weft) ']\0a' ~)
17+ ::
18+ ++ txt (to-wain:format hoon)
19+ --
20+++ grab
21+ |%
22+ ++ noun waft:clay
23+ ++ mime
24+ |= [=mite len=@ud tex=@]
25+ (cord-to-waft:clay tex)
26+ --
27+++ grad %noun
28+--
zod/luau/mar/lua.hoonnew file+20
@@ -0,0 +1,20 @@
1+/+ lua
2+
3+|_ ast=ast:lua
4+++ grad %noun
5+++ grow
6+ |%
7+ ++ noun ast
8+ ++ mime
9+ ^- ^mime
10+ [/text/lua (as-octt:mimes:html (print:lua ast))]
11+ --
12+++ grab
13+ |%
14+ ++ noun ast:lua
15+ ++ mime
16+ |= [=mite len=@ tex=@]
17+ (rash tex apex:lua)
18+ --
19+--
20+
zod/luau/mar/mime.hoonnew file+32
@@ -0,0 +1,32 @@
1+::
2+:::: /hoon/mime/mar
3+ ::
4+/? 310
5+::
6+|_ own=mime
7+++ grow
8+ ^?
9+ |%
10+ ++ jam `@`q.q.own
11+ --
12+::
13+++ grab :: convert from
14+ ^?
15+ |%
16+ ++ noun mime :: clam from %noun
17+ ++ tape
18+ |=(a=_"" [/application/x-urb-unknown (as-octt:mimes:html a)])
19+ --
20+++ grad
21+ ^?
22+ |%
23+ ++ form %mime
24+ ++ diff |=(mime +<)
25+ ++ pact |=(mime +<)
26+ ++ join |=([mime mime] `(unit mime)`~)
27+ ++ mash
28+ |= [[ship desk mime] [ship desk mime]]
29+ ^- mime
30+ ~|(%mime-mash !!)
31+ --
32+--
zod/luau/mar/noun.hoonnew file+22
@@ -0,0 +1,22 @@
1+::
2+:::: /hoon/noun/mar
3+ ::
4+/? 310
5+!:
6+:::: A minimal noun mark
7+|_ non=*
8+++ grab |%
9+ ++ noun *
10+ --
11+++ grow |%
12+ ++ mime [/application/x-urb-jam (as-octs:mimes:html (jam non))]
13+ --
14+++ grad
15+ |%
16+ ++ form %noun
17+ ++ diff |=(* +<)
18+ ++ pact |=(* +<)
19+ ++ join |=([* *] *(unit *))
20+ ++ mash |=([[ship desk *] [ship desk *]] `*`~|(%noun-mash !!))
21+ --
22+--
zod/luau/mar/ship.hoonnew file+20
@@ -0,0 +1,20 @@
1+|_ s=ship
2+++ grad %noun
3+++ grow
4+ |%
5+ ++ noun s
6+ ++ json s+(scot %p s)
7+ ++ mime
8+ ^- ^mime
9+ [/text/x-ship (as-octt:mimes:html (scow %p s))]
10+
11+ --
12+++ grab
13+ |%
14+ ++ noun ship
15+ ++ json (su:dejs:format ;~(pfix sig fed:ag))
16+ ++ mime
17+ |= [=mite len=@ tex=@]
18+ (slav %p (snag 0 (to-wain:format tex)))
19+ --
20+--
zod/luau/mar/txt.hoonnew file+275
@@ -0,0 +1,275 @@
1+::
2+:::: /hoon/txt/mar
3+ ::
4+/? 310
5+::
6+=, clay
7+=, differ
8+=, format
9+=, mimes:html
10+|_ txt=wain
11+::
12+++ grab :: convert from
13+ |%
14+ ++ mime |=((pair mite octs) (to-wain q.q))
15+ ++ noun wain :: clam from %noun
16+ --
17+++ grow
18+ => v=.
19+ |%
20+ ++ mime => v [/text/plain (as-octs (of-wain txt))]
21+ ++ elem => v ;pre: {(trip (of-wain txt))}
22+ --
23+++ grad
24+ |%
25+ ++ form %txt-diff
26+ ++ diff
27+ |= tyt=wain
28+ ^- (urge cord)
29+ (lusk txt tyt (loss txt tyt))
30+ ::
31+ ++ pact
32+ |= dif=(urge cord)
33+ ~| [%pacting dif]
34+ ^- wain
35+ (lurk txt dif)
36+ ::
37+ ++ join
38+ |= [ali=(urge cord) bob=(urge cord)]
39+ ^- (unit (urge cord))
40+ |^
41+ =. ali (clean ali)
42+ =. bob (clean bob)
43+ |- ^- (unit (urge cord))
44+ ?~ ali `bob
45+ ?~ bob `ali
46+ ?- -.i.ali
47+ %&
48+ ?- -.i.bob
49+ %&
50+ ?: =(p.i.ali p.i.bob)
51+ %+ bind $(ali t.ali, bob t.bob)
52+ |=(cud=(urge cord) [i.ali cud])
53+ ?: (gth p.i.ali p.i.bob)
54+ %+ bind $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)
55+ |=(cud=(urge cord) [i.bob cud])
56+ %+ bind $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))
57+ |=(cud=(urge cord) [i.ali cud])
58+ ::
59+ %|
60+ ?: =(p.i.ali (lent p.i.bob))
61+ %+ bind $(ali t.ali, bob t.bob)
62+ |=(cud=(urge cord) [i.bob cud])
63+ ?: (gth p.i.ali (lent p.i.bob))
64+ %+ bind $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)
65+ |=(cud=(urge cord) [i.bob cud])
66+ ~
67+ ==
68+ ::
69+ %|
70+ ?- -.i.bob
71+ %|
72+ ?. =(i.ali i.bob)
73+ ~
74+ %+ bind $(ali t.ali, bob t.bob)
75+ |=(cud=(urge cord) [i.ali cud])
76+ ::
77+ %&
78+ ?: =(p.i.bob (lent p.i.ali))
79+ %+ bind $(ali t.ali, bob t.bob)
80+ |=(cud=(urge cord) [i.ali cud])
81+ ?: (gth p.i.bob (lent p.i.ali))
82+ %+ bind $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))
83+ |=(cud=(urge cord) [i.ali cud])
84+ ~
85+ ==
86+ ==
87+ ++ clean :: clean
88+ |= wig=(urge cord)
89+ ^- (urge cord)
90+ ?~ wig ~
91+ ?~ t.wig wig
92+ ?: ?=(%& -.i.wig)
93+ ?: ?=(%& -.i.t.wig)
94+ $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig])
95+ [i.wig $(wig t.wig)]
96+ ?: ?=(%| -.i.t.wig)
97+ $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig])
98+ [i.wig $(wig t.wig)]
99+ --
100+ ::
101+ ++ mash
102+ |= $: [als=ship ald=desk ali=(urge cord)]
103+ [bos=ship bod=desk bob=(urge cord)]
104+ ==
105+ ^- (urge cord)
106+ |^
107+ =. ali (clean ali)
108+ =. bob (clean bob)
109+ |- ^- (urge cord)
110+ ?~ ali bob
111+ ?~ bob ali
112+ ?- -.i.ali
113+ %&
114+ ?- -.i.bob
115+ %&
116+ ?: =(p.i.ali p.i.bob)
117+ [i.ali $(ali t.ali, bob t.bob)]
118+ ?: (gth p.i.ali p.i.bob)
119+ [i.bob $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)]
120+ [i.ali $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))]
121+ ::
122+ %|
123+ ?: =(p.i.ali (lent p.i.bob))
124+ [i.bob $(ali t.ali, bob t.bob)]
125+ ?: (gth p.i.ali (lent p.i.bob))
126+ [i.bob $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)]
127+ =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
128+ (resolve ali bob)
129+ [fic $(ali ali, bob bob)]
130+ :: ~ :: here, alice is good for a while, but not for the whole
131+ == :: length of bob's changes
132+ ::
133+ %|
134+ ?- -.i.bob
135+ %|
136+ =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
137+ (resolve ali bob)
138+ [fic $(ali ali, bob bob)]
139+ ::
140+ %&
141+ ?: =(p.i.bob (lent p.i.ali))
142+ [i.ali $(ali t.ali, bob t.bob)]
143+ ?: (gth p.i.bob (lent p.i.ali))
144+ [i.ali $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))]
145+ =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)]
146+ (resolve ali bob)
147+ [fic $(ali ali, bob bob)]
148+ ==
149+ ==
150+ ::
151+ ++ annotate :: annotate conflict
152+ |= $: ali=(list @t)
153+ bob=(list @t)
154+ bas=(list @t)
155+ ==
156+ ^- (list @t)
157+ %- zing
158+ ^- (list (list @t))
159+ %- flop
160+ ^- (list (list @t))
161+ :- :_ ~
162+ %^ cat 3 '<<<<<<<<<<<<'
163+ %^ cat 3 ' '
164+ %^ cat 3 `@t`(scot %p bos)
165+ %^ cat 3 '/'
166+ bod
167+
168+ :- bob
169+ :- ~['------------']
170+ :- bas
171+ :- ~['++++++++++++']
172+ :- ali
173+ :- :_ ~
174+ %^ cat 3 '>>>>>>>>>>>>'
175+ %^ cat 3 ' '
176+ %^ cat 3 `@t`(scot %p als)
177+ %^ cat 3 '/'
178+ ald
179+ ~
180+ ::
181+ ++ clean :: clean
182+ |= wig=(urge cord)
183+ ^- (urge cord)
184+ ?~ wig ~
185+ ?~ t.wig wig
186+ ?: ?=(%& -.i.wig)
187+ ?: ?=(%& -.i.t.wig)
188+ $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig])
189+ [i.wig $(wig t.wig)]
190+ ?: ?=(%| -.i.t.wig)
191+ $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig])
192+ [i.wig $(wig t.wig)]
193+ ::
194+ ++ resolve
195+ |= [ali=(urge cord) bob=(urge cord)]
196+ ^- [fic=[%| p=(list cord) q=(list cord)] ali=(urge cord) bob=(urge cord)]
197+ =- [[%| bac (annotate alc boc bac)] ali bob]
198+ |- ^- $: $: bac=(list cord)
199+ alc=(list cord)
200+ boc=(list cord)
201+ ==
202+ ali=(urge cord)
203+ bob=(urge cord)
204+ ==
205+ ?~ ali [[~ ~ ~] ali bob]
206+ ?~ bob [[~ ~ ~] ali bob]
207+ ?- -.i.ali
208+ %&
209+ ?- -.i.bob
210+ %& [[~ ~ ~] ali bob] :: no conflict
211+ %|
212+ =+ lob=(lent p.i.bob)
213+ ?: =(lob p.i.ali)
214+ [[p.i.bob p.i.bob q.i.bob] t.ali t.bob]
215+ ?: (lth lob p.i.ali)
216+ [[p.i.bob p.i.bob q.i.bob] [[%& (sub p.i.ali lob)] t.ali] t.bob]
217+ =+ wat=(scag (sub lob p.i.ali) p.i.bob)
218+ =+ ^= res
219+ %= $
220+ ali t.ali
221+ bob [[%| (scag (sub lob p.i.ali) p.i.bob) ~] t.bob]
222+ ==
223+ :* :* (welp bac.res wat)
224+ (welp alc.res wat)
225+ (welp boc.res q.i.bob)
226+ ==
227+ ali.res
228+ bob.res
229+ ==
230+ ==
231+ ::
232+ %|
233+ ?- -.i.bob
234+ %&
235+ =+ loa=(lent p.i.ali)
236+ ?: =(loa p.i.bob)
237+ [[p.i.ali q.i.ali p.i.ali] t.ali t.bob]
238+ ?: (lth loa p.i.bob)
239+ [[p.i.ali q.i.ali p.i.ali] t.ali [[%& (sub p.i.bob loa)] t.bob]]
240+ =+ wat=(slag (sub loa p.i.bob) p.i.ali)
241+ =+ ^= res
242+ %= $
243+ ali [[%| (scag (sub loa p.i.bob) p.i.ali) ~] t.ali]
244+ bob t.bob
245+ ==
246+ :* :* (welp bac.res wat)
247+ (welp alc.res q.i.ali)
248+ (welp boc.res wat)
249+ ==
250+ ali.res
251+ bob.res
252+ ==
253+ ::
254+ %|
255+ =+ loa=(lent p.i.ali)
256+ =+ lob=(lent p.i.bob)
257+ ?: =(loa lob)
258+ [[p.i.ali q.i.ali q.i.bob] t.ali t.bob]
259+ =+ ^= res
260+ ?: (gth loa lob)
261+ $(ali [[%| (scag (sub loa lob) p.i.ali) ~] t.ali], bob t.bob)
262+ ~& [%scagging loa=loa pibob=p.i.bob slag=(scag loa p.i.bob)]
263+ $(ali t.ali, bob [[%| (scag (sub lob loa) p.i.bob) ~] t.bob])
264+ :* :* (welp bac.res ?:((gth loa lob) p.i.bob p.i.ali))
265+ (welp alc.res q.i.ali)
266+ (welp boc.res q.i.bob)
267+ ==
268+ ali.res
269+ bob.res
270+ ==
271+ ==
272+ ==
273+ --
274+ --
275+--
zod/luau/sys.kelvinnew file+1
@@ -0,0 +1 @@
1+[%zuse 412]
zod/luau/tests/foo.luanew file+10
@@ -0,0 +1,10 @@
1+foo = nil
2+
3+baz = bar[nil]
4+baz = bar
5+
6+i = 3
7+i, a[i] = i+1, 20
8+
9+
10+
zod/luau/tmp.hoonnew file+9
@@ -0,0 +1,9 @@
1+=/ f
2+ |* a=rule
3+ =/ x
4+ $_
5+ =/ b $:a
6+ ?> ?=(^ q.b)
7+ p.u.q.b
8+ `x`'foo'
9+(f (just 'a'))