$
的类型签名如下:
($) :: (a -> b) -> a -> b
因此,如果plus1 n = n + 1
,那么我们就有了
> ($) plus1 1
2
但那为什么呢
> ($ 1) plus1
2
也是?表单($ 1) plus1
似乎违反了$
的类型签名。
答案 0 :(得分:15)
如果您尝试
(($) 1) plus1
您将收到预期的类型错误。
特殊语法($ 1)
称为一个部分,代表\x -> x $ 1
,它与普通应用程序($) 1
不同。此语法可用于所有中缀运算符(*),例如(+ 1)
或(* 4)
。
(*)-
除外,因为(- 10)
是负常数-10
。