微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有更好的方法从总和类型中解开记录?

如何解决有没有更好的方法从总和类型中解开记录?

我有一个带有记录参数的 sum 类型,记录具有相同类型 (tag :: String) 的相同属性,我需要从传递的 T 类型值中获取其值。所以我使用案例模式匹配:

data T = T1 { tag :: String,... } | T2 { tag :: String,...} | T3 {tag :: String,...}

fun :: T -> String
fun t = case t of
        T1 { tag } -> tag
        T2 { tag } -> tag
        T3 { tag } -> tag         

我想知道是否有更简单、更简洁的方法来做到这一点?

解决方法

如果您的所有案例都始终具有此字段,并且其语义在所有案例中都相同(否则为什么您会有一个将它们合并的函数?),那么更简洁的设计就是将其从案例中移除:

type T = { tag :: String,theCase :: TCase }
data TCase = T1 { ... } | T2 { ... } | T3 { ... }

fun :: T -> String
fun = _.tag

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。