使用Option.value_exn时出错

时间:2017-10-22 16:17:40

标签: ocaml ocaml-core option-type

我试图打开非空列表List.max_elt的结果,该列表应始终存在,因此我认为Option.value_exn将是正确的工具。但它失败了一个奇怪的错误:

# List.range 0 10 |> List.max_elt ~cmp:compare;;
- : int option = Some 9

# Option.value_exn (Some 9);;
- : int = 9

# List.range 0 10 |> List.max_elt ~cmp:compare |> Option.value_exn;;
Error: This expression has type
         ?here:Lexing.position ->
         ?error:Base.Error.t -> ?message:string -> 'a Base.option -> 'a
       but an expression was expected of type int option -> 'b

有人可以向我解释这个错误吗?

我正在使用OCaml 4.05.0和最新的Core库。

1 个答案:

答案 0 :(得分:1)

这里的问题是某些东西(我猜Option.value_exn)带有可选参数。当您将其写为Option.value_exn x时,OCaml知道可选参数未被使用,但当您将其写为x |> Option.value_exn时,它不会。