[英]What does (== “ ”) mean, in Haskell?
对于那些可能会说“在您的教科书中查找”或“与它联系”的秃鹰,我做到了。
我碰到了这个声明
recipe = (== "000001")
对我来说,它看起来像是布尔值,但我不确定。 我尝试在GHCi中以不同的方式对其进行测试,但我无法找出任何可行的方法。 有人可以解释它的意思吗,这个问题将在下次有人Googles Haskell(==“”)时产生
这是一节 。 它等效于recipe = \\x -> x == "000001"
(又与recipe x = x == "000001"
)。
您可以使用GHCI
来解决这一问题。
在GHCI
,放入let recipe = (== "000001")
。 现在我们可以看到它是如何工作的。 尝试:t recipe
,看看类型是什么。 这将返回recipe :: [Char] -> Bool
,因此看起来这是一个接受Char
列表( String
)并返回Bool
的函数。
如果您对其进行测试,则会发现它对除"000001"
以外的所有输入都返回False
。
由于==
是一个运算符,因此您可以将其部分地应用于一个参数,它将返回一个接受另一个参数并返回结果的函数。 因此,这里== "000001"
返回一个函数,该函数使用一个参数填充==
的另一端并返回结果。
编辑:如果定义是recipe = ((==) "000001")
此解释正确。
要了解这一点,您应该查找部分应用程序 。 ==
函数的类型是a -> a -> Bool
,该函数接受两个相同类型的参数并返回Bool
。
但这也是a a -> (a -> Bool)
类型a
函数,它接受a
类型a
参数,并返回一个带有a -> Bool
签名a -> Bool
新函数。 这就是这里发生的事情。 我们为==
提供了一个参数,因此在这种特殊情况下,它返回了a -> Bool
或[Char] -> Bool
类型的新函数。
对于二元运算符@
,表达式(@ x)
表示(\\y -> y @ x)
。
在您的情况下,它将是(\\y -> y == "000001")
即。 接受String并说是否等于"000001"
函数。
(== arg)
或(arg ==)
是一个运算符部分(它也适用于其他运算符-不仅仅是==
)。 它的作用是将运算符部分地应用于给定的操作数。 因此(== "foo")
与\\x -> x == "foo"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.