我正在阅读 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/