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

时间:2013-10-21 04:33:19

标签: haskell typeclass

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

data Person = Person { firstName :: String
                     , lastName :: String
                     , age :: Int
                     } deriving (Eq)

1 个答案:

答案 0 :(得分: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)