λ
Size: a a a
λ
Oℕ
Oℕ
λ
AT
λ
s
λ
s
Oℕ
def useForksL[A, B](
f: A -⚬ B,
)(implicit
A: Junction.Positive[A],
B: Signaling.Positive[B],
): (A |*| (HeldFork |*| HeldFork)) -⚬ (B |*| (HeldFork |*| HeldFork)) =
id[ A |*| (HeldFork |*| HeldFork) ] .to[ A |*| ((Done |*| Delayed[SharedFork]) |*| (Done |*| Delayed[SharedFork])) ]
.>.snd(IXI) .to[ A |*| ((Done |*| Done) |*| (Delayed[SharedFork] |*| Delayed[SharedFork])) ]
.>.snd.fst(join).assocRL .to[ (A |*| Done ) |*| (Delayed[SharedFork] |*| Delayed[SharedFork]) ]
.>.fst(A.awaitPosSnd > f > B.signalPosSnd) .to[ (B |*| Done ) |*| (Delayed[SharedFork] |*| Delayed[SharedFork]) ]
.assocLR.>.snd.fst(fork) .to[ B |*| ((Done |*| Done) |*| (Delayed[SharedFork] |*| Delayed[SharedFork])) ]
.>.snd(IXI) .to[ B |*| ((Done |*| Delayed[SharedFork]) |*| (Done |*| Delayed[SharedFork])) ]
w
def useForksL[A, B](
f: A -⚬ B,
)(implicit
A: Junction.Positive[A],
B: Signaling.Positive[B],
): (A |*| (HeldFork |*| HeldFork)) -⚬ (B |*| (HeldFork |*| HeldFork)) =
id[ A |*| (HeldFork |*| HeldFork) ] .to[ A |*| ((Done |*| Delayed[SharedFork]) |*| (Done |*| Delayed[SharedFork])) ]
.>.snd(IXI) .to[ A |*| ((Done |*| Done) |*| (Delayed[SharedFork] |*| Delayed[SharedFork])) ]
.>.snd.fst(join).assocRL .to[ (A |*| Done ) |*| (Delayed[SharedFork] |*| Delayed[SharedFork]) ]
.>.fst(A.awaitPosSnd > f > B.signalPosSnd) .to[ (B |*| Done ) |*| (Delayed[SharedFork] |*| Delayed[SharedFork]) ]
.assocLR.>.snd.fst(fork) .to[ B |*| ((Done |*| Done) |*| (Delayed[SharedFork] |*| Delayed[SharedFork])) ]
.>.snd(IXI) .to[ B |*| ((Done |*| Delayed[SharedFork]) |*| (Done |*| Delayed[SharedFork])) ]
s
λ
def useForksL[A, B](
f: A -⚬ B,
)(implicit
A: Junction.Positive[A],
B: Signaling.Positive[B],
): (A |*| (HeldFork |*| HeldFork)) -⚬ (B |*| (HeldFork |*| HeldFork)) =
id[ A |*| (HeldFork |*| HeldFork) ] .to[ A |*| ((Done |*| Delayed[SharedFork]) |*| (Done |*| Delayed[SharedFork])) ]
.>.snd(IXI) .to[ A |*| ((Done |*| Done) |*| (Delayed[SharedFork] |*| Delayed[SharedFork])) ]
.>.snd.fst(join).assocRL .to[ (A |*| Done ) |*| (Delayed[SharedFork] |*| Delayed[SharedFork]) ]
.>.fst(A.awaitPosSnd > f > B.signalPosSnd) .to[ (B |*| Done ) |*| (Delayed[SharedFork] |*| Delayed[SharedFork]) ]
.assocLR.>.snd.fst(fork) .to[ B |*| ((Done |*| Done) |*| (Delayed[SharedFork] |*| Delayed[SharedFork])) ]
.>.snd(IXI) .to[ B |*| ((Done |*| Delayed[SharedFork]) |*| (Done |*| Delayed[SharedFork])) ]
λ
λ
Oℕ
def useForksL[A, B](
f: A -⚬ B,
)(implicit
A: Junction.Positive[A],
B: Signaling.Positive[B],
): (A |*| (HeldFork |*| HeldFork)) -⚬ (B |*| (HeldFork |*| HeldFork)) =
id[ A |*| (HeldFork |*| HeldFork) ] .to[ A |*| ((Done |*| Delayed[SharedFork]) |*| (Done |*| Delayed[SharedFork])) ]
.>.snd(IXI) .to[ A |*| ((Done |*| Done) |*| (Delayed[SharedFork] |*| Delayed[SharedFork])) ]
.>.snd.fst(join).assocRL .to[ (A |*| Done ) |*| (Delayed[SharedFork] |*| Delayed[SharedFork]) ]
.>.fst(A.awaitPosSnd > f > B.signalPosSnd) .to[ (B |*| Done ) |*| (Delayed[SharedFork] |*| Delayed[SharedFork]) ]
.assocLR.>.snd.fst(fork) .to[ B |*| ((Done |*| Done) |*| (Delayed[SharedFork] |*| Delayed[SharedFork])) ]
.>.snd(IXI) .to[ B |*| ((Done |*| Delayed[SharedFork]) |*| (Done |*| Delayed[SharedFork])) ]
def useForksL[A, B](
f: A -⚬ B,
)(implicit
A: Junction.Positive[A],
B: Signaling.Positive[B],
): (A x HeldFork x HeldFork) -⚬ (B x HeldFork x HeldFork) = libretto{ (a, fx, fy) =>
val gx = awaitPos(fx)
val gy = signalPos(fy)
val b = f(a)
(b, gx, gy )
}
Oℕ