Since monadic composition is kind of ugly in Scala, I have created a library implementing coroutines based on delimited continuations as provided by the CPS transformation plugin for the Scala compiler. The library is available on git.benkard.de and GitHub.
Example use:
import monix.eval.Task
import monix.execution.Scheduler.Implicits.global
import monix.reactive.Observable
import eu.mulk.fibers.Fiber._
import scala.util.Success
val slowBackgroundTask = Task.delay(100)
def produceNumbers: Unit @fiber[Int] = {
val Success(x) = await(slowBackgroundTask)
emit(x)
emit(x*2)
emit(x*3)
}
val observable: Observable[Int] = run(produceNumbers)
observable.foreachL(println).runAsync // => 100, 200, 300
Comments
Submit a comment
Note: This website uses a JavaScript-based spam prevention system. Please enable JavaScript in your browser to post comments. Comment format is plain text. Use blank lines to separate paragraphs.