gpt4 book ai didi

haskell - 在 Haskell 中加入不同的 monad

转载 作者:行者123 更新时间:2023-12-02 08:05:07 25 4
gpt4 key购买 nike

我知道我可以使用 join 删除列表的第一级

加入 [["dog"]] "输出 ["dog"]

但是为什么以下不起作用

join $ (Just ["dog"]) 

got error:
Couldn't match type ‘[]’ with ‘Maybe’

我们知道Maybe[]都是Haskell中的Monad,

join(Monad m)=> m(m a) -> m a

也许是 Monad

[] 是 Monad

这有什么问题吗?

在我看来,加入只是为了相同类型的 Monad,如果我错了,请纠正我。

是否有类似于任何 Monad 的 join 的函数,就像我上面给出的示例一样?

我知道我可以这样做

fromJust (Just ["dog"]) 

"output: ["dog"]

但我需要提前知道。

最佳答案

join::Monad m => m (m a) -> m a 中的 m 在任何地方出现都是同一个 Monad。如果您有 Just (Just "dog"),那么您就有两个 Maybe monad,并且您的 join 将完美工作。与您的列表示例类似。

从 Monad 中拉出东西不能被概括,这是 Monad 力量的一部分。考虑一下,如果您可以做到这一点,那么去除 IO Monad 的类型安全性将是微不足道的!

要从Just ["dog"] -> ["dog"],你只需要一个Maybe a -> a你可以使用Data .Maybe.fromJust,但 maybe 更安全(如果您没有 Nothing 该怎么办?)

关于haskell - 在 Haskell 中加入不同的 monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488255/

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