簡體   English   中英

將可能元素列表從Just [[x1],[x2]]展平為Just [x1,x2]

[英]Flattening a list of Maybe elements from Just [[x1],[x2]] to Just [x1,x2]

我有一個我應該如此定義的函數:

func :: (a -> Maybe [b]) -> [a] -> Maybe [b]

它應該如何工作的一些例子:

func (\x -> if x == 0 then Nothing else Just [x]) [1,2]

應該導致:

只是[1,2]

另一個例子:

func (\x -> if x == 0 then Nothing else Just [x]) [1,0]

沒有

如果列表中的Nothing都是Nothing ,則該函數返回Nothing 否則,如果列表中的所有元素都返回Just [x]那么它應該返回一個列表: Just [x1, x2, ...]

我嘗試使用fmap進行上面的類似調用,返回類似於:

[Just [1],Just [2],...]

如果我在fmap返回的列表中使用sequence ,它將遵循上面的規則(如果列表中的Nothing內容都是Nothing則返回Nothing ),這很好。 除了它返回一個這樣的列表:

只是[[1],[2]]

這不是我需要的格式。 在那種情況下,我需要它:

只是[1,2]

當我剛剛開始學習Haskell並且monad對我來說仍然是一個新主題時,我在設置如何格式化此列表或者是否有更好的方法來解決此問題時遇到了一些麻煩。 我無法更改功能類型簽名。

要將[[1],[2]]等列表轉換為[1,2] ,請使用concat 在你的情況下,由於列表在Maybe ,你需要在它上面調用fmap concat

另外,請注意,只要在mapfmap<$>的結果上調用sequence (或sequenceA ),就可以通過將兩者組合到mapM (或traverse )中來保存函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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