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