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 => talkback(. Pull)
20 },
21 ),
22 )
23 | End =>
24 if (! ended^) {
25 ended := true;
26 sink(. signal);
27 f(.);
28 }
29 | _ => sink(. signal)
30 }
31 );
32 })
33 );