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