How is the Eq class implemented for custom types?

For a specific user type, such as below, how does the implementation of the Eq class work? Its easy to write an implementation for things like Int or Float. But how to do this for all user types, since he will need to do things like pattern matching with all possible value constructors? I do not know any syntax for this.

data Person = Person { firstName :: String , lastName :: String , age :: Int } deriving (Eq) 
+6
source share
1 answer

This pattern matches any possible value constructor, just like you said! For example, if you put your code in a file and run ghc with -ddump-deriv , here is 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) 
+6
source

Source: https://habr.com/ru/post/956376/


All Articles