{-# 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