部分 - 为什么我需要在这里使用反引号?

Ang*_*ber 14 haskell

我想了解部分,并认为我已经得到它.基本上,它是将部分应用程序应用于二元运算符的一种方法.所以,我理解所有的(2*),(+1)等等的例子就好了.

但是在O'Reilly Real World Haskell的书中,章节'部分':)它有这个例子:

(`elem` ['a'..'z']) 'f'
>True
Run Code Online (Sandbox Code Playgroud)

我理解括号的必要性 - 即节语法.但为什么我需要反引号呢?

如果我尝试,我得到:

(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'
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 39

在Haskell中,反引号将名称转换为中缀运算符:

a `elem` b = elem a b
Run Code Online (Sandbox Code Playgroud)

所以

(`elem` b) a = (\x -> x `elem` b) a
             = a `elem` b
             = elem a b
Run Code Online (Sandbox Code Playgroud)

(elem b) a = elem b a
Run Code Online (Sandbox Code Playgroud)

  • 使用反引号在部分中反转函数的参数是很常见的,但它可以说是一个黑客,更清楚只是使用`flip`. (7认同)
  • @pash 对于它的价值,hlint 将建议使用函数中缀替换 Flip 实例。 (2认同)