@@ -6,14 +6,14 @@ import scala.collection.generic.CanBuildFrom
66import scala .concurrent .{ExecutionContext , Future }
77import scala .language .higherKinds
88
9- case class AsyncStream [A ](data : Future [Pair [A , AsyncStream [A ]]]) {
9+ case class AsyncStream [A ](data : Future [Step [A , AsyncStream [A ]]]) {
1010 import AsyncStream ._
1111
1212 def foldLeft [B ](start : B )(f : (B , A ) => B )(implicit executor : ExecutionContext ): Future [B ] = {
13- def impl (d : Future [Pair [A , AsyncStream [A ]]], acc : Future [B ]): Future [B ] =
13+ def impl (d : Future [Step [A , AsyncStream [A ]]], acc : Future [B ]): Future [B ] =
1414 d.flatMap {
1515 case END => acc
16- case pair => impl(pair.second .data, acc map (b => f(b, pair.first )))
16+ case step => impl(step.rest .data, acc map (b => f(b, step.value )))
1717 }
1818
1919 impl(data, Future (start))
@@ -26,16 +26,16 @@ case class AsyncStream[A](data: Future[Pair[A, AsyncStream[A]]]) {
2626 def takeWhile (p : A => Boolean )(implicit executor : ExecutionContext ): AsyncStream [A ] =
2727 new AsyncStream [A ](data map {
2828 case END => END
29- case pair if ! p(pair.first ) => END
30- case pair => Pair (pair.first, pair.second .takeWhile(p))
29+ case step if ! p(step.value ) => END
30+ case step => Step (step.value, step.rest .takeWhile(p))
3131 })
3232
3333
3434 def take (n : Int )(implicit executor : ExecutionContext ): AsyncStream [A ] =
3535 if (n <= 0 ) nil
3636 else AsyncStream (data.map {
3737 case END => END
38- case p => Pair (p.first , p.second .take(n - 1 ))
38+ case p => Step (p.value , p.rest .take(n - 1 ))
3939 })
4040
4141 def foreach [U ](f : (A ) => U )(implicit executor : ExecutionContext ): Future [Unit ] =
@@ -45,12 +45,12 @@ case class AsyncStream[A](data: Future[Pair[A, AsyncStream[A]]]) {
4545 foldLeft(Future (()))((fu : Future [Unit ], a : A ) => fu.flatMap(_ => f(a)).map(_ => ())).flatMap(u => u)
4646
4747 def flatten [B ](implicit asIterable : A => GenIterable [B ], executor : ExecutionContext ): AsyncStream [B ] = {
48- val streamChunk = (p : Pair [A , AsyncStream [A ]]) =>
49- concat(generate(asIterable(p.first ))(it => if (it.nonEmpty) Future (it.head, it.tail) else ENDF ), p.second .flatten)
48+ val streamChunk = (p : Step [A , AsyncStream [A ]]) =>
49+ concat(generate(asIterable(p.value ))(it => if (it.nonEmpty) Future (it.head, it.tail) else ENDF ), p.rest .flatten)
5050
5151 AsyncStream (data.flatMap {
5252 case END => ENDF
53- case pair => streamChunk(pair ).data
53+ case step => streamChunk(step ).data
5454 })
5555 }
5656}
@@ -59,18 +59,18 @@ case class AsyncStream[A](data: Future[Pair[A, AsyncStream[A]]]) {
5959object AsyncStream {
6060 def nil [A ](implicit executor : ExecutionContext ): AsyncStream [A ] = AsyncStream (ENDF )
6161 def single [A ](item : A )(implicit executor : ExecutionContext ): AsyncStream [A ] =
62- AsyncStream (Future (Pair (item, nil[A ])))
62+ AsyncStream (Future (Step (item, nil[A ])))
6363
6464 def generate [S , A ](start : S )(gen : S => Future [(A , S )])(implicit executor : ExecutionContext ): AsyncStream [A ] =
6565 AsyncStream (gen(start).map {
6666 case END => END
67- case (el, rest) => Pair (el, generate(rest)(gen))
67+ case (el, rest) => Step (el, generate(rest)(gen))
6868 })
6969
7070 def concat [A ](s1 : AsyncStream [A ], s2 : AsyncStream [A ])(implicit executor : ExecutionContext ): AsyncStream [A ] =
7171 new AsyncStream [A ](s1.data.flatMap {
7272 case END => s2.data
73- case p => Future (Pair (p.first , concat(p.second , s2)))
73+ case step => Future (Step (step.value , concat(step.rest , s2)))
7474 })
7575}
7676
0 commit comments