2017-10-22 7 views
0

비어 있지 않은 목록의 List.max_elt의 결과를 언 랩핑하려고 했으므로 항상 존재해야합니다. 따라서 Option.value_exn이 올바른 도구라고 생각했습니다. 하지만 이상한 오류로 실패합니다 :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과 최신 코어 라이브러리를 사용하고 있습니다.

답변

1

여기서 문제는 무엇인가 (나는 Option.value_exn이라고 생각한다)가 선택적인 인수를 취한다는 것이다. Option.value_exn x으로 쓸 때 OCaml은 선택적 인수가 사용되지 않는다는 것을 알고 있지만 x |> Option.value_exn으로 쓸 때는 그렇지 않습니다.

관련 문제