从文档:
(>>) :依次组合两个 Action ,丢弃第一个 Action 产生的任何值
(*>) : 序列 Action ,丢弃第一个参数的值。
在我看来,两者都在做同样的工作。
最佳答案
在实践中,它们是等效的。
从历史上看,Haskell 没有 Applicative
类型类(因此没有 *>
),但只有 Monad
类型类(带有 >>
)。
在某个时刻,Applicative
成为 Monad
的父类(super class).那时,它被介绍了*>
作为 >>
的更一般的变体,它不需要使用 monad,而只需要使用 applicative functor。
(*>) :: Applicative f => f a -> f b -> f b
(>>) :: Monad f => f a -> f b -> f b
最终结果是,在使用应用程序时,我们只能使用 *>
,而在使用 monads(也是应用程序)时,我们可以使用 *>
或 >>
可以互换,因为在这种情况下它们必须是等价的。其他几个与 monad 相关的函数也被类似地推广到应用程序:
return
由 pure
概括ap
由 <*>
概括mapM
由 traverse
概括关于haskell - Haskell中的*>和>>有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66884809/