过滤类型,榆树

时间:2018-01-19 15:02:04

标签: 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

在js中,模拟只是由const removeNothingFromList = (list) => list.filter(item => item)完成,我希望这只是我的经验,这使我无法看到一个有竞争力的简洁解决方案。

此外,通常有一种方法可以检查类型(强制转换为bool),还是一般过滤类型?

2 个答案:

答案 0 :(得分:10)

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

removeNothingFromList : List (Maybe a) -> List a 
removeNothingFromList list =
    List.filterMap identity list

答案 1 :(得分:5)

elm-community/maybe-extra包会公开一个名为Maybe.Extra.values的函数,这是您正在寻找的。

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