Haskell 中列表的 == 源代码定义

heg*_*ash 2 haskell list

有谁知道Haskell 中的列表到底是如何定义的? ==我尝试过 Hoogling 它,但似乎找不到Eq [a]定义实例的位置。

Sil*_*olo 6

的 GHC 实现Eq和其他内置实例是用GHC.Classes. 具体来说,您正在寻找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
Run Code Online (Sandbox Code Playgroud)

没什么超级令人兴奋的。两个空列表相等,如果头尾相等,两个非空列表相等。最后,两个任意列表不相等。唯一有趣的部分是专门化指令,它应该对整数列表、字符串和字符串列表进行单态相等检查。