这个问题已经在这里有了答案:




已关闭10年。






好的,我知道这:

f(g(x))

可以改写为:
f $ g(x)

并且还可以重写:
f . g(x)

我没有完全掌握的是两者在功能上不重叠的地方。我从概念上理解它们并不完全重叠,但是有人可以一劳永逸地为我澄清一下吗?

最佳答案

Prelude> :t ($)
($) :: (a -> b) -> a -> b
Prelude> :t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
$将函数应用于值。.包含两个功能。

因此,我可以写“将f应用于(x的g)”的f $ g x或“将f和g的组成应用于x”的f . g $ x。一种常见的样式是在左侧堆积点,尾随美元。原因是f $ g $ x的含义与f . g $ x相同,但是f $ g表达式本身通常是没有意义的(实际上可能是类型错误),而f . g表达式的含义是“f和g的组成”

关于haskell - 。与Haskell中的$,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4876828/

10-12 06:08