gpt4 book ai didi

haskell - 应用程序 : <$> vs. 纯和 <*>

转载 作者:行者123 更新时间:2023-12-04 13:21:48 25 4
gpt4 key购买 nike

在尝试了一段时间后,对我来说它看起来像 myFunction <$>pure myFunction <*>在处理 Control.Applicative 类型类时是等效的。

例子:

(++) <$> Just "foo" <*> Just "bar"
pure (++) <*> Just "foo" <*> Just "bar"

两者都有 Just "foobar" .

这些确实是等效的还是我忽略了一个边缘情况?
我应该更喜欢哪个变体/更常见?而 pure方法更长,对我来说,它对 Control.Applicative 类型类看起来更通用和真实。

最佳答案

这需要是等价的。事实上,在 Applicative typeclass 的文档中, 我们读:

As a consequence of these laws, the Functor instance for f will satisfy

fmap f x = pure f <*> x


由于 (<$>) :: Functor f => (a -> b) -> f a -> f b 是一个:

An infix synonym for fmap.



因此,它认为:
f <$> x = pure f <*> x

因此,两者可用于实现相同的目的。由于 f <$> x但是更短,并且可能更快(因为 (<*>) 需要处理所有 f a s),可能建议使用 (<$>) )。此外作为 @chepner saysliftA2 的默认实现是 liftA2 f x = (<*>) (fmap f x) , 所以这里使用 fmap (所以 <$> )也是如此。

关于haskell - 应用程序 : <$> vs. 纯和 <*>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59718400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com