1open Wonka_types;
2
3let onEnd = f => curry(source => curry(sink => {
4 let ended = ref(false);
5
6 source((.signal) => {
7 switch (signal) {
8 | Start(talkback) => {
9 sink(.Start((.signal) => {
10 talkback(.signal);
11
12 if (!ended^) {
13 ended := true;
14 f(.);
15 }
16 }));
17 }
18 | End => {
19 if (!ended^) {
20 ended := true;
21 sink(.signal);
22 f(.);
23 }
24 }
25 | _ => sink(.signal)
26 };
27 });
28}));