agda2hs-1.3: lib/Haskell/Law/Functor/Def.agda
module Haskell.Law.Functor.Def where
open import Haskell.Prim
open import Haskell.Prim.Tuple
open import Haskell.Prim.Functor
record IsLawfulFunctor (F : Set → Set) ⦃ iFuncF : Functor F ⦄ : Set₁ where
field
-- Identity: fmap id == id
identity : (fa : F a) → (fmap id) fa ≡ id fa
-- Composition: fmap (f . g) == fmap f . fmap g
composition : (fa : F a) (f : a → b) (g : b → c)
→ fmap (g ∘ f) fa ≡ (fmap g ∘ fmap f) fa
open IsLawfulFunctor ⦃ ... ⦄ public
instance postulate
iLawfulFunctorFun : IsLawfulFunctor (λ b → a → b)
iLawfulFunctorTuple₂ : IsLawfulFunctor (a ×_)
iLawfulFunctorTuple₃ : IsLawfulFunctor (a × b ×_)