过滤可能,榆树

Filter on Maybe, 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) 完成,我希望只是我的经验不足导致我无法看到相对简洁的解决方案。

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

elm-community/maybe-extra package exposes a function called Maybe.Extra.values 正是您要找的。

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

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

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