簡體   English   中英

加入Haskell的不同單子

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM