gpt4 book ai didi

haskell - `<$>`/`<*>`/`join` 的组合等于 `>>=` 吗?

转载 作者:行者123 更新时间:2023-12-02 19:23:32 25 4
gpt4 key购买 nike

据我了解,两个单子(monad)操作应该具有同样的表现力:

(^2) >>= (\x -> if x == 4 then \_ -> [] else (+1) >>= (\y -> negate >>= (\z env -> [x, y, z, env]))) $ 2
-- ^^

join (((\x -> if x == 4 then \_ _ _ -> [] else \y z env -> [x, y, env, z]) <$> (^2)) <*> (+1)) <*> (negate) $ 2
-- ^^^^^^

(请随意缩进上面的代码,因为我不知道如何在不破坏语法的情况下缩进)

两种计算产生相同的结果[],然而,它们的不同之处在于仅后者短路而前者必须通过整个结构。这不是问题,只要效果可以忽略,因此是幂等的,这当然不适用于所有可能的实例。

我可能错误地使用了 join,但我看不出如何通过应用计算获得短路。似乎短路语义源于一元计算的嵌套结构。

最佳答案

总是这样

join m = m >>= id
m >>= f = join (f <$> m)

您可以使用这些法则在 join>>= 之间进行转换。

关于haskell - `<$>`/`<*>`/`join` 的组合等于 `>>=` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62718307/

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