Cod*_*ein 7 syntax haskell boolean
对于可能会说"在教科书中查找"或"Hoogle it"的秃鹰,我做到了.
我发现了这个说法
recipe = (== "000001")
它对我来说看起来像某种布尔,但我不确定.我试过在GHCi中以不同的方式测试它,但我无法找出任何有用的东西.有人可以解释它意味着什么,这个问题将成为下一次有人谷歌Haskell(=="")的结果
Jef*_*rka 11
你可以GHCI用来计算这个.
在GHCI,投入let recipe = (== "000001").现在我们可以看到它是如何工作的.试着:t recipe看看是什么类型.返回recipe :: [Char] -> Bool,所以看起来这是一个获取Chars(a String)列表并返回a 的函数Bool.
如果你测试它,你会发现它返回False任何输入,除了"000001".
既然==是一个运算符,你可以将它部分地应用于一个参数,它将返回一个接受另一个参数并返回结果的函数.所以这里== "000001"返回一个函数,它接受一个参数来填充另一侧==并返回结果.
编辑:如果定义是recipe = ((==) "000001")这样的解释是正确的.
要理解这一点,您应该查找部分应用程序.==函数的类型是a -> a -> Bool一个函数,它接受两个相同类型的参数并返回一个Bool.
但它也是类型的函数a -> (a -> Bool),它接受一个类型的参数a并返回带有签名的新函数a -> Bool.这就是这里发生的事情.我们提供了一个参数==,因此它返回了一个新的类型函数a -> Bool,或者[Char] -> Bool在这种特殊情况下.
对于二元运算符@,表达式(@ x)意味着(\y -> y @ x).
在你的情况下,它将是(\y -> y == "000001")ie.接受String的函数,并说它是否等于"000001".
(== arg)或者(arg ==)是一个操作员部分(它也适用于其他操作员 - 不仅仅是==).它的作用是将运算符部分应用于给定的操作数.所以(== "foo")是一样的\x -> x == "foo".