[英]join for different monads in Haskell
我知道我可以使用join删除列表的第一级
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
Maybe
是莫纳德
[]
是Monad
怎么了
在我看来,只加入相同类型的Monad,如果我错了,请纠正我。
是否有类似以上我上面给出的示例的Monad的类似函数?
我知道我可以做到以下
fromJust (Just ["dog"])
"output: ["dog"]
但是我需要提前知道。
连接中的m
join :: Monad m => m (ma) -> ma
在所有出现的地方都是相同的Monad。 如果您只有Just (Just "dog")
,那么您有两个Maybe
monad,并且您的join
将完全正常。 与您的列表示例类似。
不能一概而论,这是Monad力量的一部分。 考虑一下,如果可以这样做,那么剥夺IO Monad的类型安全性将是微不足道的!
要从Just ["dog"] -> ["dog"]
,您只需要一个Data.Maybe.fromJust
Maybe a -> a
您可以使用Data.Maybe.fromJust
,但是maybe
更安全(如果Nothing
怎么办?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.