【发布时间】:2017-11-15 19:05:12
【问题描述】:
我正在尝试使用 List 折叠实现 catMaybes,但不知道应该如何开始。
我的总体思路是使用 foldl 并使用 case 来过滤 Nothing 和 Just。之后,相同的函数必须将找到的部分连接在一起,我的代码到目前为止看起来像这样:
{-# LANGUAGE LambdaCase #-}
catMaybes :: [Maybe a] -> [a]
catMaybes xs = foldl((++) \case Nothing -> []; Just y -> y) [] xs
编译时遇到很多错误... 我认为我需要朝着正确的方向努力来解决这个问题。感谢您的帮助!
【问题讨论】:
-
这试图将
(++)应用于非列表\case ...,这没什么意义。我建议尝试foldr (\x rest -> case x of ...) []。 -
\case Nothing -> []; Just y -> [y]也可以拼写为toList。