haxetink / tink_streams

Streams from the future. With lasers, of course ... whoaaaaa!!!!
The Unlicense
12 stars 9 forks source link

Pure regroup #9

Closed kevinresol closed 7 years ago

kevinresol commented 7 years ago

Added regroup() and make map/filter base on it. It is basically:

interface StreamObject<Item, Quality> {
  function regroup<Ret>(f:Array<Item>->RegroupStatus<Quality>->RegroupResult<Ret, Quality>):Stream<Ret, Quality>;
}

enum RegroupStatus<Quality> {
  Flowing:RegroupStatus<Quality>;
  Errored(e:Error):RegroupStatus<Error>;
  Ended:RegroupStatus<Quality>;
}

enum RegroupResult<Out, Quality> {
  Converted(data:Out):RegroupResult<Out, Quality>;
  Swallowed:RegroupResult<Out, Quality>;
  Untouched:RegroupResult<Out, Quality>;
  Errored(e:Error):RegroupResult<Out, Error>;
}