List 过滤[a]并不丢弃任何值

List 过滤[a]并不丢弃任何值,list,haskell,filter,map-function,maybe,List,Haskell,Filter,Map Function,Maybe,对于一个列表,可能是一个,如何筛选并仅获取列表中非无的元素 ——输入 pas=[只有3,只有1,只有5,只有9,没有,只有10,没有]:[可能是Int] --预期产量 新的_pas=[3,1,5,9,10] 我尝试了使用map的不同方法,并查看了mappaye,但找不到正确的组合。在键入问题时,我找到了答案,实际上很简单: new|pas=[pa | Just pa以及您发现的简单列表理解,已经有一个用于此的库函数: 请注意,您不仅可以搜索Hoogle的名称,还可以搜索类型签名,这在许多情况下

对于一个
列表,可能是一个
,如何筛选并仅获取列表中非
的元素

——输入
pas=[只有3,只有1,只有5,只有9,没有,只有10,没有]:[可能是Int]
--预期产量
新的_pas=[3,1,5,9,10]

我尝试了使用
map
的不同方法,并查看了
mappaye
,但找不到正确的组合。

在键入问题时,我找到了答案,实际上很简单:


new|pas=[pa | Just pa以及您发现的简单列表理解,已经有一个用于此的库函数:

请注意,您不仅可以搜索Hoogle的名称,还可以搜索类型签名,这在许多情况下都非常有用。在这里输入
[maybea]->[a]
可以立即为您提供
catMaybes
。(坦白:我忘记了函数的名称,但知道它存在,刚才就是这样发现的!)很不错。但是,我也喜欢你提到的方法(注意,这只是在中提到的一行)可以在这里使用:

unwrapJusts::[a]->[a]
unwrapJusts=mapID
你的例子是:

GHCi> unwrapJusts [Just 3, Just 1, Just 5, Just 9, Nothing, Just 10, Nothing]
[3,1,5,9,10]

这个想法相当简单:当遍历列表时,
map可能id
抛出所有
Nothing
s(即
id Nothing
s),并将
仅x
s变成
x
s。

map
本身无法过滤。
concat.map(\case Nothing->[];Just x->[x])
会过滤。(当然,你的列表理解答案显示用LCs写的更好)。