为什么在Haskell中 <*> 是一个中缀函数?

6
也许这并不是一个合适的提问场所,而且这个问题可能太“元”,但为什么<*>(以及类似的<$>)函数是中缀呢?据我理解并了解到目前为止的Haskell知识,它与fmap的功能相同。
那么,为什么fmap不是中缀,而其Applicative和Functor变体却是呢?

3
有人写过 <$>, <*>, 和 =<< 都是函数应用的变体。因此,给它们都一个类似的语法会很有帮助。正如 Cale Gibbard(我想)所说的那样,不幸的是 $ 是右结合的,而其他所有类型的应用都是左结合的。 - dfeuer
1
请注意,<*>与fmap不同:实际上,<$>是fmap的同义词,而<*>则类似于fmap,但有一些不同。 - amalloy
1个回答

13

我认为这主要是受到这个成语的启发:

f <$> x <*> y <*> z

如果使用前缀函数的拼写方式会不太好看,并且你需要知道有多少应用程序才能开始输入:

ap (ap (fmap f x) y) z

3
当然,你仍然可以写成f `fmap` x `ap` y `ap` z - leftaroundabout
10
好的。如果你打算一直这样做,那么最好选择可以作为中缀使用的函数名称。 - Daniel Wagner
值得一提的是,<*>ap 有更强的规范,因为它适用于所有 Applicatives,因此适用于所有 Monads,但 ap 只适用于 Monads。 - semicolon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接