如果($)
的类型为(a -> b) -> a -> b
,那么为什么允许您将其作为($2)
进行广告?
2不是(a -> b)
类型。
见下面的例子。
map ($2)[(+1),(+2)]
这是合法的,令人敬畏的,直觉上有意义的。请告诉我它是如何与类型系统规则一致的?
干杯
答案 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部分。