Mirror: 馃帺 A tiny but capable push & pull stream library for TypeScript and Flow
at v1.4.2 785 B view raw
1open Wonka_types; 2open Wonka_helpers; 3 4let takeWhile = f => curry(source => curry(sink => { 5 let ended = ref(false); 6 let talkback = ref(talkbackPlaceholder); 7 8 source((.signal) => { 9 switch (signal) { 10 | Start(tb) => { 11 talkback := tb; 12 sink(.signal); 13 } 14 | End when !ended^ => { 15 ended := true; 16 sink(.End); 17 } 18 | End => () 19 | Push(x) when !ended^ => { 20 if (!f(.x)) { 21 ended := true; 22 sink(.End); 23 talkback^(.Close); 24 } else { 25 sink(.signal); 26 }; 27 } 28 | Push(_) => () 29 } 30 }); 31 32 sink(.Start((.signal) => { 33 if (!ended^) { 34 switch (signal) { 35 | Pull => talkback^(.Pull); 36 | Close => { 37 ended := true; 38 talkback^(.Close); 39 } 40 } 41 }; 42 })); 43}));