【发布时间】:2023-03-26 00:41:01
【问题描述】:
我是 OCaml 的新手,在浏览一些代码时,我看到了以下内容:
let catch f m = M.bind m ~f:(
function Error e -> f e
| Ok x -
)
据我所知,这是定义一个 try/catch 块(我的理解是 OCaml 不使用单独的 catch 块)。 M.bind 是将 m 的结果传递给第二次计算的一元绑定运算符。 OCaml 参考手册说 ~ 用于标记参数,以便于理解它们在文档中的类型签名。然而,这是否意味着第二次计算(“function ..”)也被标记为 f??
【问题讨论】:
-
代码不完整。它甚至在语法上都不是有效的。但即使是这样,不知道
M和m是什么也很难解释。可以合理地假设M.bind是一元绑定,就像您所做的那样,而且很明显M.bind通过f和result,但很难说更多。 -
我也不知道第二次计算被“标记”是什么意思。但是其中的
f引用了catch的参数,而不是M.bind定义的任何内容。 -
@glennsl:代码是一个较大文件的一部分,它肯定可以编译。我只是没有提供额外的上下文。
-
您应该始终提供minimal reproducible example。
标签: ocaml