Funcons-beta : Controlling.cbs | PRETTY | PDF
Controlling
[
Datatype continuations
Funcon continuation
Entity plug-signal
Funcon hole
Funcon resume-continuation
Entity control-signal
Funcon control
Funcon delimit-current-continuation Alias delimit-cc
]Meta-variables
T, T1, T2 <: valuesDatatype
continuations(T1,T2) ::= continuation(_:abstractions(()=>T2))continuations(T1, T2) consists of abstractions whose bodies contain a hole,
and which will normally compute a value of type T2 when the hole is plugged
with a value of type T1.
Entity
_ --plug-signal(V?:values?)-> _A plug-signal contains the value to be filled into a hole in a continuation,
thereby allowing a continuation to resume.
Funcon
hole : =>valuesA hole in a term cannot proceed until it receives a plug-signal
containing a value to plug the hole.
Rule
hole --plug-signal(V)-> VFuncon
resume-continuation(K:continuations(T1, T2), V:T1) : =>T2resume-continuation(K, V) resumes a continuation K by plugging the value
V into the hole in the continuation.
Rule
X --plug-signal(V)-> X′
---------------------------------------------------------------------------
resume-continuation(continuation(abstraction(X)), V:T) --plug-signal()-> X′Entity
_ --control-signal(F?:(functions(continuations(T1, T2), T2))?)-> _A control-signal contains the function to which control is about to be passed
by the enclosing delimit-current-continuation(X).
Funcon
control(F:functions(continuations(T1, T2), T2)) : =>T1control(F) emits a control-signal that, when handled by an enclosing
delimit-current-continuation(X), will apply F to the current continuation of
control(F), (rather than proceeding with that current continuation).
Rule
control(F:functions(_,_)) --control-signal(F)-> holeFuncon
delimit-current-continuation(X:=>T) : =>T
Alias
delimit-cc = delimit-current-continuationdelimit-current-continuation(X) delimits the scope of captured continuations.
Rule
delimit-current-continuation(V:T) ~> V
Rule
X --control-signal( )-> X′
-----------------------------------------------------
delimit-current-continuation(X) --control-signal( )->
delimit-current-continuation(X′)
Rule
X --control-signal(F)-> X′
------------------------------------------------------------------
delimit-current-continuation(X) --control-signal( )->
delimit-current-continuation(apply(F, continuation closure(X′)))