过滤类型,榆树

qon*_*onf 5 elm

我有一个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
Run Code Online (Sandbox Code Playgroud)

在js中,模拟是简单地完成的const removeNothingFromList = (list) => list.filter(item => item),我希望它只是我的缺乏经验阻止我看到一个有竞争力的简洁解决方案.

此外,通常有一种方法来检查类型(强制转换为bool),或者通常是否对类型进行过滤?

Sim*_*n H 10

您的目标可以通过核心包的两个元素的组合来实现:

removeNothingFromList : List (Maybe a) -> List a 
removeNothingFromList list =
    List.filterMap identity list
Run Code Online (Sandbox Code Playgroud)


Cha*_*ert 5

elm-community/maybe-extra软件包公开了一个函数Maybe.Extra.values,这个函数正是您所需要的.

您可以使用Elm Fancy Search工具搜索所有公共包.搜索类型签名List (Maybe a) -> List a会显示我提到的包.