newtype Comparison a is defined in Data.Functor.Contravariant.
In the version of this module defined in contravariant-1.5, the Monoid instance on Contravariant is defined as follows:
instance Monoid (Comparison a) where
mempty = Comparison (\_ _ -> EQ)
mappend (Comparison p) (Comparison q) = Comparison $ mappend p q
Data.Functor.Contravariant is also defined in base (as of GHC 8.6.1, apparently).
In base, the Monoid instance on Comparison is defined as follows:
deriving instance Semigroup (Comparison a)
deriving instance Monoid (Comparison a)
What enables the instance for Monoid (Comparison a) to be automatically derived in base?
And where should I look to see the definitions of mempty and mappend for it?