25 lines
525 B
Standard 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 |