这个例子似乎打破了$的类型sig,并且它有效

时间:2013-07-09 06:30:19

标签: haskell types map apply

如果($)的类型为(a -> b) -> a -> b,那么为什么允许您将其作为($2)进行广告? 2不是(a -> b)类型。 见下面的例子。

map ($2)[(+1),(+2)]

这是合法的,令人敬畏的,直觉上有意义的。请告诉我它是如何与类型系统规则一致的?

干杯

1 个答案:

答案 0 :(得分:11)

您正在观察的行为是由于部分应用程序对中缀运算符的作用。这通常被称为“部分应用程序”,您将2应用为“右侧部分”,这将是第二个参数。所以你有:

($) :: (a -> b) -> a -> b
                   ^
                   |
                  This is the type variable for the argument '2'

您可以通过以下方式确认:

ghci
> :t ($2)
($2) :: Num a => (a -> b) -> b

您可能会在最完美的教程中找到隐藏此信息的内容,或者您​​可以在部分上看到Haskell report部分。