OCaml - 为什么要么不是 Monad

Gre*_*reg 1 monads ocaml bind

我是 OCaml 的新手,但曾使用过 Rust、Haskell 等,并且当我尝试bind在 上实现时感到非常惊讶Either,而且似乎没有任何通用实现已bind实现。

bind是我达到的第一个功能...甚至之前match,并且实现似乎很简单:

let bind_either (m: ('e, 'a) Either.t) (f: 'a -> ('e, 'b) Either.t): ('e, 'b) Either.t =
  match m with
  | Right r -> f r
  | Left l -> Left l
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

ivg*_*ivg 5

这是因为我们更喜欢更具体的Result.t,它对于正常状态和异常状态有明确的名称。而且,一般来说,Either.t 在 OCaml 程序员中并不是非常流行,因为通常可以使用更专门的类型和变体名称,以更好地传达任一分支的特定于域的目的。还值得一提的是,Either 最近才被引入 OCaml 标准,即 4.12,因此它可能会变得更受欢迎。