模組 Result

module Result: sig .. end

結果值。

結果值以明確且宣告式的方式處理計算結果和錯誤,而無需訴諸例外。


結果

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 _ 包裹的值,來完全排序 r0r1Ok _ 值小於 Error _ 值。

轉換

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

to_option rr 作為一個 option,將 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 _ 是空序列。