gpt4 book ai didi

haskell - 如果 applicative 就足够了,为什么序列需要 monad?

转载 作者:行者123 更新时间:2023-12-04 14:53:52 24 4
gpt4 key购买 nike

序列的签名是

sequence :: Monad m => t (m a) -> m (t a)

但我们可以将其实现为
sequence = traverse id

需要 m只是 Applicative .如果 monad 是应用程序,那么为什么还要在类型级别上有这个约束呢?

最佳答案

Haskell 中有许多相同但不同的函数,因为 Applicative (resp. Functor )曾经不是 Monad 的父类(super class).例如:

  • returnpure
  • ap<*>
  • liftMliftAfmap
  • liftM2 , liftM3 , &C。与 liftA2 , liftA3 , &C。
  • mapM/forMtraverse/for
  • mapM_/forM_traverse_/for_
  • sequencesequenceA
  • mzero & mplus (来自 MonadPlus )与 empty & <|> (来自 Alternative )

  • 旧函数及其原始 Monad签名仍然存在,但在新代码中,因为 Applicative–Monad Proposal (AMP)已实现,您可以随时使用 Applicative版本,因为它们更通用——也就是说,您可以随时替换 returnpure ,但反之亦然。

    关于haskell - 如果 applicative 就足够了,为什么序列需要 monad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55486718/

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