Mirror: 馃帺 A tiny but capable push & pull stream library for TypeScript and Flow
at v3.2.2 960 B view raw
1open Wonka_types; 2open Wonka_helpers; 3 4let takeWhile = f => 5 curry(source => 6 curry(sink => { 7 let ended = ref(false); 8 let talkback = ref(talkbackPlaceholder); 9 10 source((. signal) => 11 switch (signal) { 12 | Start(tb) => 13 talkback := tb; 14 sink(. signal); 15 | End when ! ended^ => 16 ended := true; 17 sink(. End); 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 | Push(_) => () 28 } 29 ); 30 31 sink(. 32 Start( 33 (. signal) => 34 if (! ended^) { 35 switch (signal) { 36 | Pull => talkback^(. Pull) 37 | Close => 38 ended := true; 39 talkback^(. Close); 40 }; 41 }, 42 ), 43 ); 44 }) 45 );