1open Wonka_types;
2open Wonka_helpers;
3
4let takeLast = max => curry(source => curry(sink => {
5 open Rebel;
6 let queue = MutableQueue.make();
7
8 captureTalkback(source, (.signal, talkback) => {
9 switch (signal) {
10 | Start(_) => talkback(.Pull)
11 | Push(x) => {
12 let size = MutableQueue.size(queue);
13 if (size >= max && max > 0) {
14 ignore(MutableQueue.pop(queue));
15 };
16
17 MutableQueue.add(queue, x);
18 talkback(.Pull);
19 }
20 | End => makeTrampoline(sink, (.) => MutableQueue.pop(queue))
21 }
22 });
23}));