\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}