1open Wonka_types;
2
3let tapAll = (~onStart, ~onPush, ~onEnd) => {
4 curry(source => curry(sink => {
5 let ended = ref(false);
6
7 source((.signal) => {
8 switch (signal) {
9 | Start(talkback) => {
10 onStart(.)
11
12 sink(.Start((.signal) => {
13 switch (signal) {
14 | Close when !ended^ => {
15 ended := true;
16 onEnd(.);
17 }
18 | Close => ()
19 | _ => talkback(.signal)
20 }
21 }));
22 }
23 | Push(x) => {
24 onPush(.x)
25 sink(.signal);
26 }
27 | End when !ended^ => {
28 ended := true;
29 onEnd(.)
30 }
31 | _ => ()
32 };
33
34 });
35 }));
36};