{-
Unpack an `Optional`, returning the default when it's `None`.
-}
let default
    : ∀(a : Type) → a → Optional a → a
    =   λ(a : Type)
      → λ(default : a)
      → λ(o : Optional a)
      → merge { Some = λ(x : a) → x, None = default } o

let example0 = assert : default Bool False (None Bool) ≡ False

let example1 = assert : default Bool False (Some True) ≡ True

in  default
