Comparing Control Constructs by Double-barrelled CPS

Hayo Thielecke

We investigate call-by-value continuation-passing style transforms that pass two continuations. Altering a single variable in the translation of lambda-abstraction gives rise to different control operators: first-class continuations; dynamic control; and (depending on a further choice of a variable) either the return statement of C; or Landin's J-operator. In each case there is an associated simple typing. For those constructs that allow upward continuations, the typing is classical, for the others it remains intuitionistic, giving a clean distinction independent of syntactic details. Moreover, those constructs that make the typing classical in the source of the CPS transform break the linearity of continuation use in the target.