部分应用函数 - 围绕第二个Arg的圆括号

时间:2014-04-09 03:47:04

标签: haskell

我实施了Learn You a Haskell的练习。

isUpperCase' :: Char -> Bool
isUpperCase' = (`elem` ['A'..'Z'])

据我了解,(elem ['A'..'Z'])是部分应用的功能。致电isUpperCase' 'B'会调用isUpperCase apply 'B',从而产生True

请注意,如果没有括号,则会发生以下编译时错误:

*Main> :l IsUpperCase.hs
[1 of 1] Compiling Main             ( IsUpperCase.hs, interpreted )

IsUpperCase.hs:3:16: parse error on input ``'
Failed, modules loaded: none.

用括号括起部分应用函数的原因是什么?

1 个答案:

答案 0 :(得分:3)

事实上,这个功能被“`'”包围了。

在haskell中foo `bar` bazbar foo baz完全相同。它将前缀函数应用程序转换为中缀运算符。

与其他运营商一样,我们可以使用(2 *)之类的分段。在这种情况下

(`elem` ['A'..'Z'])
\a -> a `elem` ['A'..'Z']
\a -> elem a ['A' .. 'Z']
flip elem ['A' .. 'Z']

这只是一种避免编写flip的聪明(hacky)方法。你所拥有的相当于

isUpperCase' = flip elem ['A' .. 'Z']