不懂连接运算符(++)

Le *_*huc 3 haskell

我有关于列表连接的问题.函数加上加号(++)与括号不同

(++ "abc") ("xyz") >>> it's xyzabc
(++) "abc" "xyz"   >>> it's abcxyz
Run Code Online (Sandbox Code Playgroud)

我认为这是因为:

(++ "abc") ("xyz") >>> "xyz" ++ "abc"
(++) "abc" "xyz"   >>> "abc" ++ "xyz"
Run Code Online (Sandbox Code Playgroud)

但为什么,并有任何文件谈论这个?

我继续测试"减法"功能.结果如我所料:

(subtract 10) (5) >>> -5
(subtract) 10 5   >>> -5
Run Code Online (Sandbox Code Playgroud)

Ale*_*lec 9

由于++是一个运算符,Haskell期望它处于中缀位置.在任何一方添加parens都会告诉Haskell将其视为前缀函数.这就是为什么

(++) "abc" "xyz"      -- "abc" ++ "xyz"
Run Code Online (Sandbox Code Playgroud)

它的工作方式.然而,在运算符的一侧有一个paren,就像(++ "abc")或者("abc" ++)是一个特殊的东西叫做一个部分 - 它本质上产生一个函数,可以"填补"缺少的参数

(++ "abc")        -- equivalent to `\x -> x ++ "abc"`
("abc" ++)        -- equivalent to `\x -> "abc" ++ x`
Run Code Online (Sandbox Code Playgroud)

那么,(++ "abc") ("xyz")相当于(\x -> x ++ "abc") ("xyz")相当于"xyz" ++ "abc".