{-# OPTIONS --type-in-type
#-}
open import NeilPrelude
module Pointed (F : Set → Set)
(fmap : {A B : Set} → (A → B) → F A → F B)
(pure : {A : Set} → A → F A)
-- Functor Laws
(1stLaw : {A : Set} → {fa : F A} → Extensionality → fmap id fa ≡ fa)
(2ndLaw : {A B C : Set} → {f : A → B} → {g : B → C} → {fa : F A} → Extensionality
→ fmap (g ∘ f) fa ≡ (fmap g ∘ fmap f) fa)
where
import Functor
open Functor F fmap 1stLaw 2ndLaw public