我正在寻找一种可以同时映射和展开List和Maybe的代码。我在这个话题中找到了这样一个flatMap函数:
flatMap :: (t -> [a]) -> [t] -> [a]
flatMap _ [] = []
flatMap f (x:xs) = f x ++ flatMap f xs
这个很好用:
> flatMap id [[],[1,2],[3],[],[4,5,6]]
[1,2,3,4,5,6]
唯一的问题是它不适用于Maybes。相反,我必须使用Data.Maybe.mapMaybe:
> Data.Maybe.mapMaybe id [Just 1, Nothing, Just 2, Just 3, Nothing]
[1,2,3]
有没有一个内置函数可以处理列表(Lists)和可能性(Maybes)(以及可能的其他类型)?
catMaybes :: [Maybe a] -> [a]
或concat :: [[a]] -> [a]
,再配合map :: (a -> b) -> [a] -> [b]
使用。 - rampion