Haskell的函数应用运算符($)用法

标签 haskell functional-programming

我正在阅读 Bartosz Milewski 的一篇文章,其中他定义了以下函数:

instance Applicative Chan where
  pure x = Chan (repeat x)
  (Chan fs) <*> (Chan xs) = Chan (zipWith ($) fs xs)

为什么函数应用运算符要放在括号中?我知道这通常是为了使用前缀表示法形式的中缀函数,但我不明白为什么在这种情况下,该函数不能简单地表示为 Chan (zipWith $ fs xs),想知道两者之间有什么区别。

(如果您仍需要上下文,请参阅 article )

最佳答案

在本例中,$传递zipWith。和写作是一样的

zipWith (\ f x ->  f x) fs xs

如果没有括号,则相当于

zipWith (fs xs)

这不会进行类型检查。

括号中的运算符的行为与普通标识符完全相同。具有以下定义:

apply = ($)

代码可能看起来像

zipWith apply fs xs

关于Haskell的函数应用运算符($)用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27869364/

相关文章:

javascript - 过滤和更改变量值而不引起副作用

arrays - 将函数映射到haskell中的列表/数组?

Haskell - 也许算术

scala - 如何组合 Kleisli[M, A, C] 和 Kleisli[M, B, C]

haskell - 除了使用 CPP 之外,Haskell 中的条件编译

haskell - 过多的垃圾收集(和内存使用?)

haskell - ghc-7.10 : Non type-variable argument (Use FlexibleContexts to permit this)

algorithm - 功能性学习困境

haskell - 为什么 Haskell 认为 lambda 抽象是弱头范式(WHNF)?

c - 从数组中查找总和等于给定数字的元素