{-# 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)