好的,这是漫长的一天,我的大脑可能无法在 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吗?废话。什么样的技巧在这里起作用?