Actually, your "third" functor law follows directly from actual functor laws and the fact that f . g ≡ id
:
fmap f . fmap g ≡ fmap (f . g) ≡ fmap id ≡ id
And there's more: Haskell ensures that if first law holds for Functor
instance, then the second one also holds (this is a free theorem for the type of fmap
). I.e. you have to prove only fmap id ≡ id
law for your Functor
instance to ensure that it is valid.