Skip to content

Commit 5acd46c

Browse files
committed
尝试构造 divergence 的 dup
1 parent 4c1f385 commit 5acd46c

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

docs/std/datatype/Pair.i

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
type Trivial
2+
3+
node sole(-- value!: Trivial)
4+
node trivialDrop(value!: Trivial --)
5+
6+
rule trivialDrop(value!) sole(value!) {}
7+
8+
type Pair
9+
10+
node pair(
11+
left: 'L,
12+
right: 'R,
13+
------
14+
handle: Trivial,
15+
value!: Pair,
16+
)
17+
18+
node pairDup(
19+
target!: Pair,
20+
----------
21+
first: Pair,
22+
second: Pair,
23+
)
24+
25+
rule pairDup(target!, first, second) pair(left, right, handle, value!) {
26+
let leftFirst, leftSecond = pairDup(left)
27+
let rightFirst, rightSecond = pairDup(right)
28+
@connect(pair(leftFirst, rightFirst, trivialDrop()), first)
29+
@connect(pair(leftSecond, rightSecond, trivialDrop()), second)
30+
sole(handle)
31+
}
32+
33+
function divergence(): Trivial {
34+
let left, right, handle, value = pair()
35+
let first, second = pairDup(value)
36+
@connect(first, left)
37+
@connect(second, right)
38+
return handle
39+
}
40+
41+
eval @inspect(divergence())

0 commit comments

Comments
 (0)