I just noticed this was written in "draft" and I had forgotten to post it :P

> newtype ConstF c a = Const c

> instance Functor (ConstF c) where

> fmap f (Const c) = Const c

> kb :: ConstF Bool a

> kb = ConstF True

> -- fmap id (Const c) = id (Const c)

> -- Const c = Const c <-- applying the definition of fmap

> -- fmap (f.g) (Const c) = (fmap f . fmap g) (Const c)

> -- Const c = fmap f (fmap g (Const c)) <<- applying the definition of fmap on the left side

> -- Const c = fmap f (Const c) <-- applying the definition of fmap on the right side

> -- Const c = Const c

> newtype ConstF c a = Const c

> instance Functor (ConstF c) where

> fmap f (Const c) = Const c

> kb :: ConstF Bool a

> kb = ConstF True

> -- fmap id (Const c) = id (Const c)

> -- Const c = Const c <-- applying the definition of fmap

> -- fmap (f.g) (Const c) = (fmap f . fmap g) (Const c)

> -- Const c = fmap f (fmap g (Const c)) <<- applying the definition of fmap on the left side

> -- Const c = fmap f (Const c) <-- applying the definition of fmap on the right side

> -- Const c = Const c