我有一个List (Maybe a)
,我想过滤掉Nothing
的实例。我可能设法做到了,但我对我需要的代码量不满意:
removeNothingFromList : List (Maybe a) -> List a
removeNothingFromList list =
List.foldr
(\cur list ->
case cur of
Just val ->
val :: list
Nothing ->
list
)
[]
list
在js中,模拟只是由const removeNothingFromList = (list) => list.filter(item => item)
完成,我希望这只是我的经验,这使我无法看到一个有竞争力的简洁解决方案。
此外,通常有一种方法可以检查类型(强制转换为bool),还是一般过滤类型?
答案 0 :(得分:10)
您的目标可以通过核心软件包的两个元素的组合来实现:
removeNothingFromList : List (Maybe a) -> List a
removeNothingFromList list =
List.filterMap identity list
答案 1 :(得分:5)
elm-community/maybe-extra
包会公开一个名为Maybe.Extra.values
的函数,这是您正在寻找的。 p>
您可以使用Elm Fancy Search工具搜索所有公开包。搜索List (Maybe a) -> List a
的类型签名将显示我提到的包。