1

我刚刚注意到 Lwt.mli 中的以下函数:

val backtrace_bind : (exn -> exn) -> 'a t -> ('a -> 'b t) -> 'b t
val backtrace_catch : (exn -> exn) -> (unit -> 'a t) -> (exn -> 'a t) -> 'a t
val backtrace_try_bind : (exn -> exn) -> (unit -> 'a t) -> ('a -> 'b t) -> (exn -> 'b t) -> 'b t
val backtrace_finalize : (exn -> exn) -> (unit -> 'a t) -> (unit -> unit t) -> 'a t

不幸的是,它们是无证的。他们在做什么?

4

1 回答 1

2

在 GitHub 和文档中的一些挖掘表明,当使用pa_lwt-lwt-debug传递给camlp4. 默认情况下,它们也用于相同的目的ppx_lwt

-lwt-debug选项记录在此页面上:http: //ocsigen.org/lwt/2.5.0/manual/(搜索“回溯支持”页面以转到它)。

此处记录了关闭此功能的选项ppx_lwthttps ://ocsigen.org/lwt/dev/api/Ppx_lwt (搜索-no-debug)。

看到这个commit,说明这些都用在生成的代码try_lwt中等:https ://github.com/ocsigen/lwt/commit/78eee34fb6247da38a3d4ea5b7872676181d47e2

编辑:通过查看更多代码确认更多内容,并合并评论。

于 2015-08-06T16:14:19.837 回答