diff --git a/src/core/CCResult.ml b/src/core/CCResult.ml index 451a338a..57e48752 100644 --- a/src/core/CCResult.ml +++ b/src/core/CCResult.ml @@ -64,6 +64,14 @@ let get_exn = function | Ok x -> x | Error _ -> raise Get_error +let get_or e ~default = match e with + | Ok x -> x + | Error _ -> default + +let map_or f e ~default = match e with + | Ok x -> f x + | Error _ -> default + let catch e ~ok ~err = match e with | Ok x -> ok x | Error y -> err y diff --git a/src/core/CCResult.mli b/src/core/CCResult.mli index 691dec3d..411c2246 100644 --- a/src/core/CCResult.mli +++ b/src/core/CCResult.mli @@ -64,6 +64,12 @@ val get_exn : ('a, _) t -> 'a whenever possible. @raise Get_error if the value is an error. *) +val get_or : ('a, _) t -> default:'a -> 'a +(** [get_or e ~default] returns [x] if [e = Ok x], [default] otherwise *) + +val map_or : ('a -> 'b) -> ('a, 'b) t -> default:'b -> 'b +(** [map_or f e ~default] returns [f x] if [e = Ok x], [default] otherwise *) + val catch : ('a, 'err) t -> ok:('a -> 'b) -> err:('err -> 'b) -> 'b (** [catch e ~ok ~err] calls either [ok] or [err] depending on the value of [e]. *)