>>352
破壊的代入を使わずに処理と状態を持ち回るため(破壊的代入は可能なら避けたい)、

let rec cps f init x =
  let y = f init x in `T (y, cps f y)
let f = cps (fun x y -> なにかの処理) init

のような関数を定義したり、この関数をネットワーク越しにsend/receiveしたりする


で、型を書くとこんな感じ(あれ?意外と読めるw)

let rec cps (f : 'a -> 'b -> 'a) (init : 'a) (x : 'b) : [> `T of 'a * 'c ] =
  let (y : 'a) = f init x in `T (y, cps f y)
let (f : 'a -> [> `T of 'a * 'b ] as 'b) = cps ((fun x y -> なにかの処理) : 'a -> 'c -> 'a) init