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



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

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

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

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

在本例中,$传入 zipWith 。这和写作一样

zipWith ( f x ->  f x) fs xs

如果没有括号,它将等效

zipWith (fs xs)

这不会进行类型检查。

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

apply = ($)

代码可能看起来像

zipWith apply fs xs

最新更新