如何为用户定义的类型实现Eq类型类?

use*_*220 6 haskell typeclass

对于某些用户定义的类型,如下所示,Eq类型类的实现如何工作?为Int或Float之类的东西编写实现很简单.但是如何完成所有用户类型的捕获,因为它需要对每个可能的值构造函数进行模式匹配等操作?我不知道有任何语法可以做到这一点.

data Person = Person { firstName :: String
                     , lastName :: String
                     , age :: Int
                     } deriving (Eq)
Run Code Online (Sandbox Code Playgroud)

Dan*_*ner 6

它模式匹配每个可能的值构造函数,就像你说的那样!例如,如果你把你的代码放在一个文件并运行ghc-ddump-deriv,这里就是你得到了什么:

==================== 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)
Run Code Online (Sandbox Code Playgroud)