lh-l4v/lib/ML_Utils/OptionExtras.ML

25 lines
525 B
Standard ML

(*
* Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: BSD-2-Clause
*)
signature OPTION_EXTRAS =
sig
(*
`get_or_else f opt` unwraps `opt` if it is `SOME x`. Otherwise,
it uses `f` to construct a value.
This is useful when `f` has side effects, such as throwing an
exception or printing a warning.
*)
val get_or_else: (unit -> 'a) -> 'a option -> 'a
end
structure OptionExtras: OPTION_EXTRAS =
struct
fun get_or_else _ (SOME x) = x
| get_or_else f NONE = f ()
end