[英]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.