将 union 转换为其组件类型的 Maybe 的通用方法

问题描述

我有一个如下所示的联合类型:

type User
    = Admin ComplicatedAdminRecord
    . . .
    | normalUser ComplicatedUserRecord

我正在寻找一种通用方法来将 List User 过滤到联合组件类型的(可能是空的)List 中。

我所拥有的有效,但它很糟糕,而且 copypasta 代码数量与我尝试过滤的类型数量呈线性关系。它看起来像这样:

asMaybeAdmin : User -> Maybe ComplicatedAdminRecord
asMaybeAdmin user =
    case user of
        Admin adminUser ->
            Just adminUser

        _ ->
            nothing

onlyAdmins =
    List.filterMap asMaybeAdmin users

如果您只尝试过滤一种类型,这很好,但是必须为每个组件类型编写一个新的 asMaybe<Type> 是很多重复,我觉得我应该能够写一般。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)