这个问题在这里已经有了答案:
What does $ mean/do in Haskell?
(2 个回答)
5年前关闭。
我无法理解函数应用程序如何与 Haskell 中的柯里化(Currying)一起工作。
如果我有以下功能:
($) :: (a -> b) -> a -> b
我了解要部分应用此功能,我需要提供
(a -> b)
函数( $
的第一个参数)。那么为什么可以先应用一个值(即反向参数)?
($ 0) :: Num a => (a -> b) -> b
我在这里想念什么?
最佳答案
($)
是一个运算符。在 Haskell 中,任何运算符都可以写在左侧(如 (x $)
)或右侧(如 ($ x)
):
(x $) = (\y -> x $ y) = ($) x
($ x) = (\y -> y $ x) = flip ($) x
请注意,此规则的唯一异常(exception)是
(-)
,为了方便写负数:\x -> (x-) :: Num a => a -> a -> a -- equivalent to \x -> (-) x
\x -> (-x) :: Num a => a -> a -- equivalent to \x -> negate x
如果你想简洁地写
(\y -> y - x)
, 你可以使用 subtract
:\x -> subtract x :: Num a => a -> a -> a -- equivalent to \x -> flip (-) x
关于Haskell 美元运算符应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14407599/