为什么这个表单不违反`$`的类型签名?

Geo*_*rge 4 haskell

类型签名$如下:

($) :: (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)

因此,如果plus1 n = n + 1,那么我们就有了

> ($) plus1 1
2
Run Code Online (Sandbox Code Playgroud)

但那为什么呢

> ($ 1) plus1
2
Run Code Online (Sandbox Code Playgroud)

还有?表单($ 1) plus1似乎违反了类型签名$.

chi*_*chi 15

如果你试试

(($) 1) plus1
Run Code Online (Sandbox Code Playgroud)

你会得到你期望的类型错误.

特殊语法($ 1)称为section,代表\x -> x $ 1,它与普通应用程序不同($) 1.此语法可以与所有中缀运算符(*)一起使用,例如(+ 1)或(* 4).

(*)除了-,因为(- 10)是负常数-10.