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

时间:2016-12-25 15:40:23

标签: haskell

$的类型签名如下:

($) :: (a -> b) -> a -> b

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

> ($) plus1 1
2

但那为什么呢

> ($ 1) plus1
2

也是?表单($ 1) plus1似乎违反了$的类型签名。

1 个答案:

答案 0 :(得分:15)

如果您尝试

(($) 1) plus1

您将收到预期的类型错误。

特殊语法($ 1)称为一个部分,代表\x -> x $ 1,它与普通应用程序($) 1不同。此语法可用于所有中缀运算符(*),例如(+ 1)(* 4)

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