{-# OPTIONS --safe #-}
module Data.Maybe where
open import Agda.Builtin.Maybe public
open import Function
open import Level
open import Path
maybe : {B : Maybe A → Type b} → B nothing → (∀ x → B (just x)) → ∀ x → B x
maybe b f (just x) = f x
maybe b f nothing = b
maybe′ : B → (A → B) → Maybe A → B
maybe′ = maybe
from-maybe : A → Maybe A → A
from-maybe d = maybe′ d id
just-inj : Injective (just {A = A})
just-inj {x = x} = cong (maybe′ x id)
map-maybe : (A → B) → Maybe A → Maybe B
map-maybe f = maybe′ nothing (just ∘ f)
open import Data.Bool
is-just : Maybe A → Bool
is-just = maybe′ false (const true)