【发布时间】:2021-09-20 08:58:03
【问题描述】:
在Learn you a Haskell中,给出了下面的例子:
map ($ 3) [(4+), (10*), (^2), sqrt]
[7.0,30.0,9.0,1.7320508075688772]
但是,我不明白为什么会这样。
函数的签名是
Prelude> :info ($)
($) :: (a -> b) -> a -> b
Prelude> :t ($ 3)
($ 3) :: Num a => (a -> b) -> b
但是,-> 是左结合运算符,所以$ :: (a -> b) -> a -> b 实际上是((($ :: (a-b))-> a)-> b),所以($ 3) 中的3 不应该对应(a->b) 函数,它是第一个“变量”函数$?即为什么($ 3)是签名(a -> b) -> b的函数
【问题讨论】:
-
不要使用多态值
3,尝试使用具体的值,例如($ False)或($ ())
标签: haskell partial-application partialfunction