Haskell 多态性

Haskell Polymorphism

data Set a = Set [a]

-- Example 1
instance (Eq a, Ord a)  => Eq (Set a) where 
  (Set xs) == (Set ys) = (sort xs) == (sort ys) 

-- Example 2 
instance (Eq a, Ord a)  => Eq (Set a) where   
  (==) = eqSet

eqSet (Set xs) (Set ys) = (sort xs) == (sort ys)

示例 1 和示例 2 是覆盖“==”以对 Set 数据类型进行相等性测试的不同方法。我想知道哪种方式更可取,为什么?

谢谢。

除了 eqSet 标识符的存在和可以用 {-# INLINE eqSet #-} pragma 解决的内联问题外,没有区别。我个人的偏好是使用内联版本,因为单独的定义不提供任何价值,但我认为这并不重要。