Haskell 中列表的 `==` 的源代码定义
Source code definition of `==` for lists in Haskell
有谁知道 ==
是如何为 Haskell 中的列表定义的?我试过 Hoogling 它,但似乎无法找到定义实例 Eq [a]
的位置。
Eq
和其他 built-in 个实例的 GHC 实现是在 GHC.Classes
. Specifically, you're looking for Eq [a]
中编写的
instance (Eq a) => Eq [a] where
{-# SPECIALISE instance Eq [[Char]] #-}
{-# SPECIALISE instance Eq [Char] #-}
{-# SPECIALISE instance Eq [Int] #-}
[] == [] = True
(x:xs) == (y:ys) = x == y && xs == ys
_xs == _ys = False
没有什么超级令人兴奋的。两个空列表相等,如果头部和尾部相等,两个非空列表也相等。最后,两个任意列表是non-equal。唯一有趣的部分是专门化指令,它应该单态化整数列表、字符串和字符串列表的相等性检查。
有谁知道 ==
是如何为 Haskell 中的列表定义的?我试过 Hoogling 它,但似乎无法找到定义实例 Eq [a]
的位置。
Eq
和其他 built-in 个实例的 GHC 实现是在 GHC.Classes
. Specifically, you're looking for Eq [a]
instance (Eq a) => Eq [a] where {-# SPECIALISE instance Eq [[Char]] #-} {-# SPECIALISE instance Eq [Char] #-} {-# SPECIALISE instance Eq [Int] #-} [] == [] = True (x:xs) == (y:ys) = x == y && xs == ys _xs == _ys = False
没有什么超级令人兴奋的。两个空列表相等,如果头部和尾部相等,两个非空列表也相等。最后,两个任意列表是non-equal。唯一有趣的部分是专门化指令,它应该单态化整数列表、字符串和字符串列表的相等性检查。