我仍然很难理解Haskell==
和=
Haskell 之间的区别。我知道前者与重载类型有关,而后者“给出”函数的结果,但我似乎无法理解它!任何帮助将非常感激。
5 回答
=
是 Haskell 中的一个特殊保留符号,意思是“定义为”。它用于引入定义。也就是说,您可以使用它来创建新的值和函数,这些值和函数可能会在其他值和函数的定义中被引用。
==
不是保留符号,而只是类型的普通函数Eq a => a -> a -> Bool
。它恰好在类型类( Eq
) 中声明,但并没有什么特别之处。您可以隐藏内置声明==
并将其重新定义为您想要的任何内容。但通常它表示“等于”,并且因为它是类型类的一部分,您可以定义(重载)它以表示您希望“相等”对您的特定类型表示的任何含义。
例如:
data Foo = Foo Int
instance Eq Foo where
(Foo x) == (Foo y) = x == y
请注意,我曾经=
定义==
for Foo
!
一种思考差异的简洁方法是在编译时=
断言相等,而在运行时==
检查相等。
=
执行任务。或定义可能是一个更好的词。只能做一次。这是一个特殊的运算符/符号。它不是一个函数
==
是一个函数,通常是中缀的,它接受两个 typeclass 输入Eq
并返回一个 bool
Prelude> let a = 1
Prelude> a
1
Prelude> 5 == 5
True
Prelude> 5 == 6
False
Prelude> :t (==)
(==) :: (Eq a) => a -> a -> Bool
我还不是 Haskell 专家,但与大多数其他语言一样,==
比较运算符产生true
or false
,而=
赋值运算符是赋值运算符,在 Haskell 中归结为函数声明。
ghci> 5 == 5
true
ghci> "foo" == "bar"
false
ghci> let foo = "bar"
== 是用于比较两个事物是否相等的运算符。这是非常普通的haskell函数,类型为“Eq a => a -> a -> Bool”。该类型告诉它它适用于实现 Eq 类型类的每种类型的值,因此它有点重载。
另一方面,= 是一个赋值运算符,用于引入定义。
== 是为了平等
示例:比较两个整数
= 是赋值
示例:将整数分配给变量