OCaml 中是否包含 let* 运算符的实现?

ᆼᆺᆼ*_*ᆼᆺᆼ 4 monads ocaml

OCaml现在支持所谓的“let 运算符” ,但是我想知道 monad 的let*and的默认实现是否and*随模块中某处的标准库一起提供?

Vla*_*hev 5

它们不是直接定义的,但您可以将它们“导入”为:

let (let*) = Option.bind

let editor_home =
  let* home = Sys.getenv_opt "HOME" in 
  let* editor = Sys.getenv_opt "EDITOR" in 
  Some (editor ^ " " ^ home)
Run Code Online (Sandbox Code Playgroud)

  • 不确定,但我不乐意将 Option.bind 作为 Stdlib.(let*) ,使其成为某种“默认”单子。拥有 `Option.(let*)` 是另一个选项,嗯,但是这样效果好吗?执行 `open Option` 会污染命名空间,所以我认为您只剩下 `let (let*) = Option.(let*)` ,这与 `let (let*) = Option.bind` 没有什么不同。也许将其放入“Option.Let_syntax.(let*)”或类似的“ppx_let”约定中。事实上,我对“导入”绑定感到非常满意。 (2认同)