好的,这是漫长的一天,我的大脑可能无法在 Haskell 级别上运行,但我无法理解“Learn You a Haskell”中的一个例子。
该部分被称为带有 $ 的函数应用程序,并且有如何$
定义的示例:
($) :: (a -> b) -> a -> b
f $ x = f x
到目前为止,一切都清楚了。我理解本节中的所有示例,除了最后一个:
ghci> map ($ 3) [(4+), (10*), (^2), sqrt]
[7.0,30.0,9.0,1.7320508075688772]
在这里,我们($ 3)
跨函数列表进行映射,并将这些函数应用到3
. 但这怎么可能?
从第一个代码片段可以清楚地看出,第一个参数是一个函数,我们甚至可以这样写:
*Main> ($) sqrt 4
2.0
现在($ 3)
是函数的一个部分应用$
,而是3
在函数的位置上!那么3
应该是一个功能还是什么?
还有一个谜团:到底是(4+)
什么?我知道那(+4)
是函数的偏应用+
,那么(4+)
应该是函数的偏应用4
吗?废话。什么样的技巧在这里起作用?