haskell - Haskell中==和=之间的区别

标签 haskell operator-overloading equality ghci

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

最佳答案

=是 Haskell 中的一个特殊保留符号,意思是“定义为”。它用于引入定义。也就是说,您可以使用它来创建新的值和函数,这些值和函数可能会在其他值和函数的定义中被引用。
==不是保留符号,而只是 Eq a => a -> a -> Bool 类型的普通函数.它恰好在 type class 中声明( Eq ),但它并没有什么特别之处。您可以隐藏 == 的内置声明并将其重新定义为您想要的任何内容。但通常它表示“等于”,并且因为它是类型类的一部分,您可以定义(重载)它以表示您希望“相等”对您的特定类型表示的任何含义。

例如:

data Foo = Foo Int

instance Eq Foo where
  (Foo x) == (Foo y) = x == y

请注意,我使用了 =定义 ==对于 Foo !

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

关于haskell - Haskell中==和=之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5987731/

相关文章:

windows - 无法将 Windows 上的 OpenCL 与 GHC 链接起来

optimization - 优化 Haskell 内循环

perl - Perl 6 中的重载常量

python - 重载 + 以支持元组

haskell - GHC 无法用 GADT 和存在类型推导出 (a1 ~ a)

parsing - Haskell 解析器到 AST 数据类型,赋值

c++ - 复杂表达式中重载 + 的问题

swift - 如何为通用 Result<T> 类型定义相等性?

scala - 在Scala中,有一种简洁而简单的方法来比较一个值和多个值

scala - 比较 Seq 和 Array 的不同行为