部分应用程序如何在这里工作?

rye*_*guy 2 syntax haskell

> map (++ "!") ["a", "b", "c"]
["a!","b!","c!"]
> (++) "!" "a"
"!a"
Run Code Online (Sandbox Code Playgroud)

这两行对我来说没有意义.使用++map,似乎第一个参数被附加到第二个参数,但在第二个列表中,它是另一种方式.Haskell如何推理map函数中的行为?

C. *_*ann 9

(++ "!")是一个称为操作符部分的特殊语法.它部分应用了中缀运算符的第二个参数,而(++) "!"像普通的部分应用程序一样工作并且正在应用第一个参数.

使用带有反引号的中缀式常规函数也可以做同样的事情:(`map` [1..3])相当于(\f -> map f [1..3]).

这看起来很奇怪,因为它是,这是一个特殊情况的额外功能,因为它是非常有用的.