Подпись List.Assoc.find
:
utop # List.Assoc.find;;
- : ('a, 'b) List.Assoc.t -> equal:('a -> 'a -> bool) -> 'a -> 'b option =
<fun>
List.Assoc.find
ожидает, что параметр equal
является функцией.
Ocaml интерпретирует код List.Assoc.find _q _x
как:
_q
: это первый параметр, поэтому его тип равен ('a, 'b) List.Assoc.t
.
Поскольку equal
не упоминается, _x
является 3-м параметром подписи выше, поэтому он вводится как строка (это определяется ограничением типа функции evalVar
).
Ниже приведен примериз List.Assoc.find
:
utop # List.Assoc.find [("a",1);("b",2)] ~equal:(fun _a _b -> _a=_b) "a";;
- : int option = Some 1