scala> import cats.Eval, cats.instances.future._
import cats.Eval
import cats.instances.future._
scala> import io.iteratee.Enumerator
import io.iteratee.Enumerator
scala> import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global
scala> import scala.concurrent.Future
import scala.concurrent.Future
scala> val enum = Enumerator.liftMEval(Eval.always { Future { println("hi"); 5 }}).take(5)
enum: io.iteratee.Enumerator[scala.concurrent.Future,Int] = io.iteratee.Enumeratee$$anon$25@ddca1ad
scala> enum.toVector
res0: scala.concurrent.Future[Vector[Int]] = List()
scala> hi
enum.toVector
hi
res1: scala.concurrent.Future[Vector[Int]] = List()
enum.toVector
is just a convenience method for having the enumerator run an iteratee that collects all values.)
Stream[A]
Enumerator[Future, A]
Enumerator[Task, A]
if thats less terrible
fold(())((_, _) => ())
Enumerator
is for all intents and purposes infinite