It pattern matches against every possible value constructor, just like you said! For example, if you put your code in a file and run ghc
with -ddump-deriv
, here's what you get:
==================== Derived instances ====================
Derived instances:
instance GHC.Classes.Eq Main.Person where
GHC.Classes.==
(Main.Person a1_alh a2_ali a3_alj)
(Main.Person b1_alk b2_all b3_alm)
= ((((a1_alh GHC.Classes.== b1_alk))
GHC.Classes.&& ((a2_ali GHC.Classes.== b2_all)))
GHC.Classes.&& ((a3_alj GHC.Classes.== b3_alm)))
GHC.Classes./= a_aln b_alo
= GHC.Classes.not ((GHC.Classes.==) a_aln b_alo)