final class ControlContext[+A, -B, +C] extends Serializable
This class represent a portion of computation that has a 'hole' in it. The
class has the ability to compute state up until a certain point where the
state has the A
type. If this context is given a function of type
A => B
to move the state to the B
type, then the entire computation can
be completed resulting in a value of type C
.
An Example:
val cc = new ControlContext[String, String, String]( fun = { (f: String=>String, err: Exception => String) => val updatedState = try f("State") catch { case e: Exception => err(e) } updatedState + "-Complete!" }, x = null.asIntanceOf[String] } cc.foreach(_ + "-Continued") // Results in "State-Continued-Complete!"
This class is used to transform calls to shift
in the continuations
package. Direct use and instantiation is possible, but usually reserved
for advanced cases.
A context may either be trivial or non-trivial. A trivial
context just has a state of type A
. When completing the computation,
it's only necessary to use the function of type A => B
directly against
the trivial value. A non-trivial value stores a computation around
the state transformation of type A => B
and cannot be short-circuited.
- A
The type of the state currently held in the context.
- B
The type of the transformed state needed to complete this computation.
- C
The return type of the entire computation stored in this context.
- Note
fun
andx
are allowed to benull
.- See also
scala.util.continutations.shiftR
- Alphabetic
- By Inheritance
- ControlContext
- Serializable
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
-
new
ControlContext(fun: ((A) ⇒ B, (Exception) ⇒ B) ⇒ C, x: A)
- fun
The captured computation so far. The type
(A => B, Exception => B) => C
is a function where:- The first parameter
A=>B
represents the computation defined against the current state held in the ControlContext. - The second parameter
Exception => B
represents a computation to perform if an exception is thrown from the first parameter's computation. - The return value is the result of the entire computation contained in this
ControlContext
.
- The first parameter
- x
The current state stored in this context. Allowed to be null if the context is non-trivial.
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[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
flatMap[A1, B1, C1 <: B](f: (A) ⇒ ControlContext[A1, B1, C1]): ControlContext[A1, B1, C]
Maps and flattens this
ControlContext
with anotherControlContext
generated from the current state.Maps and flattens this
ControlContext
with anotherControlContext
generated from the current state.- A1
The new type of the contained state.
- B1
The new type of the state after the stored continuation has executed.
- C1
The result type of the nested
ControlContext
. Because the nestedControlContext
is executed within the outerControlContext
, this type must>: B
so that the resulting nested computation can be fed through the current continuation.- f
A transformation function from the current state to a nested
ControlContext
.- returns
The transformed
ControlContext
.
- Annotations
- @noinline()
- Note
The resulting comuptation is still the type
C
.
- final def flatMapCatch[A1 >: A, B1 <: B, C1 >: C <: B1](pf: PartialFunction[Exception, ControlContext[A1, B1, C1]]): ControlContext[A1, B1, C1]
-
final
def
foreach(f: (A) ⇒ B): C
Runs the computation against the state stored in this
ControlContext
.Runs the computation against the state stored in this
ControlContext
.- f
the computation that modifies the current state of the context.
- Note
This method could throw exceptions from the computations.
- def foreachFull(f: (A) ⇒ B, g: (Exception) ⇒ B): C
- val fun: ((A) ⇒ B, (Exception) ⇒ B) ⇒ C
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
final
def
getTrivialValue: A
- returns
The current state value.
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
isTrivial: Boolean
- returns
true if this context only stores a state value and not any deferred computation.
-
final
def
map[A1](f: (A) ⇒ A1): ControlContext[A1, B, C]
Modifies the currently captured state in this
ControlContext
.Modifies the currently captured state in this
ControlContext
.- A1
The new type of state in this context.
- f
A transformation function on the current state of the
ControlContext
.- returns
The new
ControlContext
.
- Annotations
- @noinline()
- final def mapFinally(f: () ⇒ Unit): ControlContext[A, B, C]
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
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( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
- val x: A