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

时间:2015-01-09 21:15:39

标签: haskell functional-programming

我正在读Bartosz Milewski的作品,其中他定义了以下功能:

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

为什么函数应用程序运算符在括号中?我理解这通常是为了在前缀表示形式中使用中缀函数,但我不明白为什么,在这种情况下,函数不能简单地表达为{{ 1}},并想知道两者之间的区别是什么。

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

1 个答案:

答案 0 :(得分:13)

在这种情况下,$正在传递zipWith。它和写作一样

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

没有括号,它将等同于

zipWith (fs xs)

这不会出现问题。

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

apply = ($)

代码可能看起来像

zipWith apply fs xs