{-# OPTIONS --without-K --safe #-}
module Data.Maybe.Base where
open import Level
open import Agda.Builtin.Maybe public
maybe : {B : Maybe A → Type b} → B nothing → ((x : A) → B (just x)) → (x : Maybe A) → B x
maybe b f nothing = b
maybe b f (just x) = f x
mapMaybe : (A → B) → Maybe A → Maybe B
mapMaybe f nothing = nothing
mapMaybe f (just x) = just (f x)
fromMaybe : A → Maybe A → A
fromMaybe x = maybe x (λ x → x)
infixr 2 _|?_
_|?_ : Maybe A → A → A
_|?_ = λ x y → fromMaybe y x