Модуль Either
module Either: sig .. end
Тип Either.
Either — это самый простой и наиболее общий тип суммы/варианта: значение типа ('a, 'b) Either.t является либо Left (v : 'a), либо Right (v : 'b).
Это естественный выбор в API универсальных функций, где значения могут принадлежать двум различным случаям, возможно, разных типов, без присвоения определенного смысла каждому случаю.
Например:
List.partition_map:
('a -> ('b, 'c) Either.t) -> 'a list -> 'b list * 'c list Если вам нужен параметризованный тип, где один вариант означает успех, а другой — неудачу, вы должны использовать более конкретный тип Result.t.
- Since 4.12
type ('a, 'b) t =
|
| Left of
|
|
| Right of
|
Значение типа ('a, 'b) Either.t содержит либо значение типа 'a, либо значение типа 'b
val left : 'a -> ('a, 'b) t
left v — это Left v.
val right : 'b -> ('a, 'b) t
right v — это Right v.
val is_left : ('a, 'b) t -> bool
is_left (Left v) — это true, is_left (Right v) — это false.
val is_right : ('a, 'b) t -> bool
is_right (Left v) — это false, is_right (Right v) — это true.
val find_left : ('a, 'b) t -> 'a option
find_left (Left v) — это Some v, find_left (Right _) — это None
val find_right : ('a, 'b) t -> 'b option
find_right (Right v) — это Some v, find_right (Left _) — это None
val map_left : ('a1 -> 'a2) -> ('a1, 'b) t -> ('a2, 'b) t
map_left f e — это Left (f v) если e — это Left v и e если e — это Right _.
val map_right : ('b1 -> 'b2) -> ('a, 'b1) t -> ('a, 'b2) t
map_right f e — это Right (f v) если e — это Right v и e если e — это Left _.
val map : left:('a1 -> 'a2) -> right:('b1 -> 'b2) -> ('a1, 'b1) t -> ('a2, 'b2) t
map ~left ~right (Left v) — это Left (left v), map ~left ~right (Right v) — это Right (right v).
val fold : left:('a -> 'c) -> right:('b -> 'c) -> ('a, 'b) t -> 'c
fold ~left ~right (Left v) — это left v, и fold ~left ~right (Right v) — это right v.
val iter : left:('a -> unit) -> right:('b -> unit) -> ('a, 'b) t -> unit
iter ~left ~right (Left v) — это left v, и iter ~left ~right (Right v) — это right v.
val for_all : left:('a -> bool) -> right:('b -> bool) -> ('a, 'b) t -> bool
for_all ~left ~right (Left v) — это left v, и for_all ~left ~right (Right v) — это right v.
val equal : left:('a -> 'a -> bool) -> right:('b -> 'b -> bool) -> ('a, 'b) t -> ('a, 'b) t -> bool
equal ~left ~right e0 e1 проверяет равенство e0 и e1 с использованием left и right для сравнения значений, заключённых соответственно в Left _ и Right _.
val compare : left:('a -> 'a -> int) -> right:('b -> 'b -> int) -> ('a, 'b) t -> ('a, 'b) t -> int
compare ~left ~right e0 e1 определяет полное упорядочение e0 и e1 с использованием left и right для сравнения значений, заключённых соответственно в Left _ и Right _. Значения Left _ меньше значений Right _.
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Either.html