我想了解各个部分,并认为我已经得到了它。基本上,它是将部分应用程序应用于二元运算符的一种方法。所以我理解所有(2*)
,(+1)
等示例都很好。
但是在O'Reilly Real World Haskell的书中,Sections'section':)有这个例子:
(`elem` ['a'..'z']) 'f'
>True
我理解括号的必要性 - 即节语法。但为什么我需要反击?
如果我尝试,我会:
(elem ['a'..'z']) 'f'
<interactive>:220:19:
Couldn't match expected type `[[Char]]' with actual type `Char'
In the second argument of `elem', namely 'f'
In the expression: (elem ['a' .. 'z']) 'f'
In an equation for `it': it = (elem ['a' .. 'z']) 'f'
答案 0 :(得分:37)
在Haskell中,反引号将名称转换为中缀运算符:
a `elem` b = elem a b
所以
(`elem` b) a = (\x -> x `elem` b) a
= a `elem` b
= elem a b
虽然
(elem b) a = elem b a