\begin{code}
{-# OPTIONS --cubical --safe #-}
module Data.Maybe.Sugar where
open import Prelude
open import Data.Maybe
infixl 4 _<*>_
\end{code}
%<*bind>
\begin{code}
_>>=_ : Maybe A → (A → Maybe B) → Maybe B
nothing >>= f = nothing
just x >>= f = f x
\end{code}
%</bind>
\begin{code}
\end{code}
%<*pure>
\begin{code}
pure : A → Maybe A
pure = just
\end{code}
%</pure>
%<*ap>
\begin{code}
_<*>_ : Maybe (A → B) →
Maybe A →
Maybe B
nothing <*> xs = nothing
just f <*> nothing = nothing
just f <*> just x = just (f x)
\end{code}
%</ap>
\begin{code}
_>>_ : Maybe A → Maybe B → Maybe B
nothing >> _ = nothing
just _ >> y = y
guard : Bool → Maybe ⊤
guard false = nothing
guard true = just tt
\end{code}