packages feed

agda2hs-1.3: lib/Haskell/Law/Applicative/Either.agda

module Haskell.Law.Applicative.Either where

open import Haskell.Prim
open import Haskell.Prim.Either

open import Haskell.Prim.Applicative

open import Haskell.Law.Applicative.Def

open import Haskell.Law.Functor.Either

instance
  iLawfulApplicativeEither : IsLawfulApplicative (Either a)
  -- (λ { true → true ; false → false })

  iLawfulApplicativeEither .identity = λ { (Left _) → refl; (Right _) → refl }

  iLawfulApplicativeEither .composition =
    λ { (Left _)  _         _         → refl
      ; (Right _) (Left _)  _         → refl
      ; (Right _) (Right _) (Left _)  → refl
      ; (Right _) (Right _) (Right _) → refl
      }

  iLawfulApplicativeEither .homomorphism _ _ = refl

  iLawfulApplicativeEither .interchange = λ { (Left _) _ → refl; (Right _) _ → refl }

  iLawfulApplicativeEither .functor = λ { _ (Left _) → refl; _ (Right _) → refl }