trait Cont[F[_], K, R] extends Serializable
This construction supports Async.cont
trait Async[F[_]] { ... def cont[A](body: Cont[F, A]): F[A] }
It's a low level operation meant for implementors, end users should use async, start or
Deferred instead, depending on the use case.
It can be understood as providing an operation to resume an F asynchronously, of type
Either[Throwable, A] => Unit, and an (interruptible) operation to semantically block until
resumption, of type F[A]. We will refer to the former as resume, and the latter as get.
These two operations capture the essence of fiber blocking, and can be used to build async,
which in turn can be used to build Fiber, start, Deferred and so on.
Refer to the default implementation to Async[F].async for an example of usage.
The reason for the shape of the Cont construction in Async[F].cont, as opposed to simply:
trait Async[F[_]] { ... def cont[A]: F[(Either[Throwable, A] => Unit, F[A])] }
is that it's not safe to use concurrent operations such as get.start.
The Cont encoding therefore simulates higher-rank polymorphism to ensure that you can not
call start on get, but only use operations up to MonadCancel (flatMap, onCancel,
uncancelable, etc).
If you are an implementor, and you have an implementation of async but not cont, you can
override Async[F].async with your implementation, and use Async.defaultCont to implement
Async[F].cont.
- Source
- Cont.scala
- Alphabetic
- By Inheritance
- Cont
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def apply[G[_]](implicit G: MonadCancel[G, Throwable]): ((Either[Throwable, K]) => Unit, G[K], ~>[F, G]) => G[R]
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()