在 Elm 中嵌套两个 case 语句时,是否可以避免重复代码?

Can I avoid repeated code when nesting two case statements in Elm?

我正在将 Maybe String 转换为 Date。为了便于阅读,我将别名 Date 键入 Birthdate

birthdate_from_url : Url.Url -> Birthdate
birthdate_from_url url =
    case url.query of
        Just query ->
            case Date.fromIsoString query of 
                Ok birthdate ->
                    birthdate

                Err _ ->
                    defaultBirthdate

        Nothing ->
            defaultBirthdate

对于这个嵌套案例,我不得不为每个可能的“失败”调用 defaultBirthdate 两次。

是否有使用或不使用 case 的替代方法?

您可以使用 Maybe.map:

birthdate_from_url : Url.Url -> Birthdate
birthdate_from_url url =
    case url.query |> Maybe.map Date.fromIsoString of
        Just (Ok birthdate) ->
            birthdate

        _ ->
            defaultBirthdate