Haskell中==和=之间的差异

mac*_*ian 6 haskell equality operator-overloading ghci

我仍然无法理解Haskell ===Haskell 之间的区别.我知道前者与重载类型有关​​,而后者"给出了函数的结果",但我似乎无法理解它!任何帮助将非常感激.

Tom*_*ett 17

=是Haskell中特殊的保留符号,意思是"被定义为".它用于介绍定义.也就是说,您可以使用它来创建可在其他值和函数的定义中引用的新值和函数.

==不是保留的符号,而只是一种普通的类型功能Eq a => a -> a -> Bool.它碰巧在类型class(Eq)中声明,但没有什么特别之处.您可以隐藏内置声明==并将其重新定义为您想要的任何内容.但通常它意味着"等于",并且因为它是类型类的一部分,所以您可以定义(重载)它,表示您希望"等于"对您的特定类型意味着什么.

例如:

data Foo = Foo Int

instance Eq Foo where
  (Foo x) == (Foo y) = x == y
Run Code Online (Sandbox Code Playgroud)

请注意,我曾经=定义==Foo!

想一想差异的简洁方法是在编译时= 断言相等,而在运行时== 检查相等性.