Bare.Option
either
picks the first Some _
value of its arguments if any. More formally, either (Some x) _
is Some x
, either None (Some y)
is Some y
, and either None None
is None
.
filter p o
is Some x
iff o
is Some x
and p o
is true
.
In other words, filter
is like List.filter
if option
is the type of lists of either zero or one elements. In fact, the following equality holds for all p
and for all o
: Option.filter p o = List.hd (List.filter p (Option.to_list o))
The other filter
variants below are also equivalent to their List
counterpart and a similar equality holds.
filter_map
is the Option
counterpart to List
's filter_map
. Incidentally, filter_map f o
is also bind o f
.
filter_s
is filter
where the predicate returns a promise.
filter_map_s
is filter_map
where the function returns a promise.
filter_e
is filter
where the predicate returns a result
.
val filter_map_e :
('a -> ('b option, 'e) Stdlib.result) ->
'a option ->
('b option, 'e) Stdlib.result
filter_map_e
is filter_map
where the function returns a result
.
val filter_es :
('a -> (bool, 'e) Stdlib.result Lwt.t) ->
'a option ->
('a option, 'e) Stdlib.result Lwt.t
filter_es
is filter
where the predicate returns a promise of a result
.
val filter_map_es :
('a -> ('b option, 'e) Stdlib.result Lwt.t) ->
'a option ->
('b option, 'e) Stdlib.result Lwt.t
filter_map_es
is filter_map
where the function returns a promise of a result
.
filter_ok o
is Some x
iff o
is Some (Ok x)
.
filter_error o
is Some x
iff o
is Some (Error x)
.
filter_left o
is Some x
iff o
is Some (Either.Left x)
.
filter_right o
is Some x
iff o
is Some (Either.Right x)
.
catch f
is Some (f ())
if f
does not raise an exception, it is None
otherwise.
You should only use catch
when you truly do not care about what exception may be raised during the evaluation of f ()
. If you need to inspect the raised exception, or if you need to pass it along, consider Result.catch
instead.
If catch_only
is set, then only exceptions e
such that catch_only e
is true
are caught.
Whether catch_only
is set or not, this function never catches non-deterministic runtime exceptions of OCaml such as Stack_overflow
and Out_of_memory
.
catch_o f
is equivalent to join @@ catch f
. In other words, it is f ()
if f
doesn't raise any exception, and it is None
otherwise.
catch_only
has the same behaviour and limitations as with catch
.
catch_s f
is a promise that resolves to Some x
if and when f ()
resolves to x
. Alternatively, it resolves to None
if and when f ()
is rejected.
You should only use catch_s
when you truly do not care about what exception may be raised during the evaluation of f ()
. If you need to inspect the raised exception, or if you need to pass it along, consider Result.catch_s
instead.
If catch_only
is set, then only exceptions e
such that catch_only e
is true
are caught.
Whether catch_only
is set or not, this function never catches non-deterministic runtime exceptions of OCaml such as Stack_overflow
and Out_of_memory
.
catch_os f
is like catch_s f
where f
returns a promise that resolves to an option. catch_os f
resolves to None
if f ()
resolves to None
or is rejected. It resolves to Some _
if f ()
does.
catch_only
has the same behaviour and limitations as with catch
.