模块 Effect.Shallow

module Shallow: sig .. end

type ('a, 'b) continuation 

('a,'b) continuation 是一个限定延续,它期望一个 'a 值并返回一个 'b 值。

val fiber : ('a -> 'b) -> ('a, 'b) continuation

fiber f 构造一个延续,它运行计算 f

type ('a, 'b) handler = {
   retc : 'a -> 'b;
   exnc : exn -> 'b;
   effc : 'c. 'c Effect.t -> (('c, 'a) continuation -> 'b) option;
}

('a,'b) handler 是一个包含三个字段的句柄记录 - retc 是值句柄,exnc 处理异常,effc 处理由句柄封闭的计算执行的效果。

val continue_with : ('c, 'a) continuation ->
'c -> ('a, 'b) handler -> 'b

continue_with k v h 使用句柄 h 用值 v 恢复延续 k

val discontinue_with : ('c, 'a) continuation ->
exn -> ('a, 'b) handler -> 'b

discontinue_with k e h 使用句柄 h 通过引发异常 e 来恢复延续 k

val discontinue_with_backtrace : ('a, 'b) continuation ->
exn -> Printexc.raw_backtrace -> ('b, 'c) handler -> 'c

discontinue_with k e bt h 使用句柄 h 通过引发异常 e 来恢复延续 k,使用原始回溯 bt 作为异常的来源。

val get_callstack : ('a, 'b) continuation -> int -> Printexc.raw_backtrace

get_callstack c n 返回延续 c 上的调用栈顶部的描述,最多包含 n 个条目。