packages feed

agda2hs-1.3: lib/Haskell/Law/Monad/Maybe.agda

module Haskell.Law.Monad.Maybe where

open import Haskell.Prim
open import Haskell.Prim.Maybe

open import Haskell.Prim.Monad

open import Haskell.Law.Monad.Def

open import Haskell.Law.Applicative.Maybe

instance
  iLawfulMonadMaybe : IsLawfulMonad Maybe
  iLawfulMonadMaybe .leftIdentity _ _ = refl

  iLawfulMonadMaybe .rightIdentity = λ { Nothing → refl; (Just _) → refl }

  iLawfulMonadMaybe .associativity = λ { Nothing _ _ → refl; (Just _) _ _ → refl }

  iLawfulMonadMaybe .pureIsReturn _ = refl

  iLawfulMonadMaybe .sequence2bind =
    λ { Nothing  _        → refl
      ; (Just _) Nothing  → refl
      ; (Just _) (Just _) → refl
      }

  iLawfulMonadMaybe .fmap2bind = λ { _ Nothing → refl; _ (Just _) → refl }

  iLawfulMonadMaybe .rSequence2rBind =
    λ { Nothing  _        → refl
      ; (Just _) Nothing  → refl
      ; (Just _) (Just _) → refl
      }