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 解决的内联问题外,没有区别。我个人的偏好是使用内联版本,因为单独的定义不提供任何价值,但我认为这并不重要。
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 解决的内联问题外,没有区别。我个人的偏好是使用内联版本,因为单独的定义不提供任何价值,但我认为这并不重要。