{- `fold` is the primitive function for consuming `Optional` values -} let fold : ∀(a : Type) → Optional a → ∀(optional : Type) → ∀(some : a → optional) → ∀(none : optional) → optional = Optional/fold let example0 = assert : fold Natural (Some 2) Natural (λ(x : Natural) → x) 0 ≡ 2 let example1 = assert : fold Natural (None Natural) Natural (λ(x : Natural) → x) 0 ≡ 0 in fold