模块 Result

module Result: sig .. end

结果值。

Result 值以显式和声明的方式处理计算结果和错误,而无需诉诸异常。


结果

type ('a, 'e) t = ('a, 'e) result = 
| Ok of 'a
| Error of 'e

结果值的类型。要么是值 Ok v,要么是错误 Error e

val ok : 'a -> ('a, 'e) result

ok v 等同于 Ok v

val error : 'e -> ('a, 'e) result

error e 等同于 Error e

val value : ('a, 'e) result -> default:'a -> 'a

value r ~default 如果 rOk v 则为 v,否则为 default

val get_ok : ('a, 'e) result -> 'a

get_ok r 如果 rOk v 则为 v,否则抛出异常。

val get_error : ('a, 'e) result -> 'e

get_error r 如果 rError e 则为 e,否则抛出异常。

val bind : ('a, 'e) result ->
('a -> ('b, 'e) result) -> ('b, 'e) result

bind r f 如果 rOk v 则为 f v,如果 rError _ 则为 r

val join : (('a, 'e) result, 'e) result -> ('a, 'e) result

join rr 如果 rrOk r 则为 r,如果 rrError _ 则为 rr

val map : ('a -> 'b) -> ('a, 'e) result -> ('b, 'e) result

map f r 如果 rOk v 则为 Ok (f v),如果 rError _ 则为 r

val map_error : ('e -> 'f) -> ('a, 'e) result -> ('a, 'f) result

map_error f r 如果 rError e 则为 Error (f e),如果 rOk _ 则为 r

val fold : ok:('a -> 'c) -> error:('e -> 'c) -> ('a, 'e) result -> 'c

fold ~ok ~error r 如果 rOk v 则为 ok v,如果 rError e 则为 error e

val iter : ('a -> unit) -> ('a, 'e) result -> unit

iter f r 如果 rOk v 则为 f v,否则为 ()

val iter_error : ('e -> unit) -> ('a, 'e) result -> unit

iter_error f r 如果 rError e 则为 f e,否则为 ()

谓词和比较

val is_ok : ('a, 'e) result -> bool

is_ok r 当且仅当 rOk _ 时为 true

val is_error : ('a, 'e) result -> bool

is_error r 当且仅当 rError _ 时为 true

val equal : ok:('a -> 'a -> bool) ->
error:('e -> 'e -> bool) ->
('a, 'e) result -> ('a, 'e) result -> bool

equal ~ok ~error r0 r1 使用 okerror 分别比较 Ok _Error _ 包裹的值来测试 r0r1 的相等性。

val compare : ok:('a -> 'a -> int) ->
error:('e -> 'e -> int) ->
('a, 'e) result -> ('a, 'e) result -> int

compare ~ok ~error r0 r1 使用 okerror 分别比较 Ok _ Error _ 包裹的值来对 r0r1 进行全序排序。 Ok _ 值小于 Error _ 值。

转换

val to_option : ('a, 'e) result -> 'a option

to_option rr 作为选项,将 Ok v 映射为 Some v,将 Error _ 映射为 None

val to_list : ('a, 'e) result -> 'a list

to_list r 如果 rOk v 则为 [v],否则为 []

val to_seq : ('a, 'e) result -> 'a Seq.t

to_seq rr 作为序列。 Ok v 是包含 v 的单元素序列,而 Error _ 是空序列。