也许这并不是一个合适的提问场所,而且这个问题可能太“元”,但为什么
那么,为什么
<*>
(以及类似的<$>
)函数是中缀呢?据我理解并了解到目前为止的Haskell知识,它与fmap
的功能相同。那么,为什么
fmap
不是中缀,而其Applicative和Functor变体却是呢?<*>
(以及类似的<$>
)函数是中缀呢?据我理解并了解到目前为止的Haskell知识,它与fmap
的功能相同。fmap
不是中缀,而其Applicative和Functor变体却是呢?我认为这主要是受到这个成语的启发:
f <$> x <*> y <*> z
如果使用前缀函数的拼写方式会不太好看,并且你需要知道有多少应用程序才能开始输入:
ap (ap (fmap f x) y) z
f `fmap` x `ap` y `ap` z
。 - leftaroundabout<*>
比 ap
有更强的规范,因为它适用于所有 Applicatives,因此适用于所有 Monads,但 ap
只适用于 Monads。 - semicolon
<$>
,<*>
, 和=<<
都是函数应用的变体。因此,给它们都一个类似的语法会很有帮助。正如 Cale Gibbard(我想)所说的那样,不幸的是$
是右结合的,而其他所有类型的应用都是左结合的。 - dfeuer<*>
与fmap不同:实际上,<$>
是fmap的同义词,而<*>
则类似于fmap,但有一些不同。 - amalloy