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?