Source code on Github{-# OPTIONS --without-K #-}
module Class.Functor.Core where
open import Class.Prelude
open import Class.Core
private variable a b c : Level
record Functor (F : Type↑) : Typeω where
infixl 4 _<$>_ _<$_
infixl 1 _<&>_
field _<$>_ : (A → B) → F A → F B
fmap = _<$>_
_<$_ : A → F B → F A
x <$ y = const x <$> y
_<&>_ : F A → (A → B) → F B
_<&>_ = flip _<$>_
open Functor ⦃...⦄ public
record FunctorLaws (F : Type↑) ⦃ _ : Functor F ⦄ : Typeω where
field
fmap-id : ∀ {A : Type a} (x : F A) →
fmap id x ≡ x
fmap-∘ : ∀ {A : Type a} {B : Type b} {C : Type c}
{f : B → C} {g : A → B} (x : F A) →
fmap (f ∘ g) x ≡ (fmap f ∘ fmap g) x
open FunctorLaws ⦃...⦄ public