gpt4 book ai didi

haskell - monad 的表现力是否是以牺牲代码重用为代价的?

转载 作者:行者123 更新时间:2023-12-04 17:07:43 25 4
gpt4 key购买 nike

当我比较 Applicative 和 Monad 类型类的二元运算时

(<*>) :: Applicative f => f (a -> b) -> f a -> f b
(=<<) :: Monad m => (a -> m b) -> m a -> m b

两个差异变得明显:
  • ap期望正常的纯函数,而 bind期望一个 monadic Action ,它必须返回一个相同类型的 monad
  • ap Action 的顺序由应用程序决定,而使用 bind monadic Action 可以决定控制流

  • 所以 monad 给了我额外的表达能力。然而,由于它们不再接受普通的纯函数,这种表现力似乎是以牺牲代码重用为代价的。

    我的结论可能有些幼稚甚至错误,因为我对 Haskell 和 monadic 计算的经验很少。黑暗中的任何光线都值得赞赏!

    最佳答案

    如果你有纯函数 g :: a -> b您可以将其设为 Applicative版本由
    pure g :: Applicative f => f (a -> b)
    Monad
    pure . g :: Applicative f => a -> f b
    因此,从您的意义上讲,您不会丢失任何代码重用。

    关于haskell - monad 的表现力是否是以牺牲代码重用为代价的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40573790/

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