模块 Effect.Deep

module Deep: sig .. end

深度处理器

type ('a, 'b) continuation 

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

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

continue k x 通过将 x 传递给 k 来恢复延续 k

val discontinue : ('a, 'b) continuation -> exn -> 'b

discontinue k e 通过在 k 中引发异常 e 来恢复延续 k

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

discontinue_with_backtrace k e bt 通过在 k 中使用 bt 作为异常的来源引发异常 e 来恢复延续 k

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

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

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

match_with f v h 在处理器 h 中运行计算 f v

type 'a effect_handler = {
   effc : 'b. 'b Effect.t -> (('b, 'a) continuation -> 'a) option;
}

'a effect_handler 是一个深度处理器,具有一个恒等值处理器 fun x -> x 和一个引发任何异常的异常处理器 fun e -> raise e

val try_with : ('b -> 'a) -> 'b -> 'a effect_handler -> 'a

try_with f v h 在处理器 h 下运行计算 f v

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

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