Stream.hx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. class Error {}
  2. enum Outcome<Data, Failure> {
  3. Success(data:Data);
  4. Failure(failure:Failure);
  5. }
  6. interface Future<T> {
  7. function map<A>(f:T->A):Future<A>;
  8. }
  9. typedef Surprise<D, F> = Future<Outcome<D, F>>;
  10. abstract Promise<T>(Surprise<T, Error>) from Surprise<T, Error> to Surprise<T, Error> {
  11. public inline function map<R>(f:Outcome<T, Error>->R):Future<R>
  12. return this.map(f);
  13. @:from static inline function ofError<T>(e:Error):Promise<T>
  14. return throw 1;
  15. }
  16. abstract Stream<Item, Quality>(StreamObject<Item, Quality>) from StreamObject<Item, Quality> to StreamObject<Item, Quality> {
  17. public var depleted(get, never):Bool;
  18. inline function get_depleted()
  19. return this.depleted;
  20. @:to function dirty():Stream<Item, Error>
  21. throw 1;
  22. @:from static public function flatten<Item, Quality>(f:Future<Stream<Item, Quality>>):Stream<Item, Quality>
  23. throw 1;
  24. @:from static public function promise<Item, Quality>(f:Promise<Stream<Item, Quality>>):Stream<Item, Error> {
  25. return flatten(f.map(function(o) return switch o {
  26. case Success(s): s.dirty();
  27. case Failure(e): throw 1;
  28. }));
  29. }
  30. }
  31. interface StreamObject<Item, Quality> {
  32. var depleted(get, never):Bool;
  33. }