有没有更好的方法从总和类型中解包记录?
Is there better way to unwrap record from sum type?
我有一个带有记录参数的总和类型,记录具有相同类型的相同属性 (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
我想知道是否有更简单、更简洁的方法来做到这一点?
如果你所有的 case 总是有这个字段,并且它的语义在所有 case 中都是相同的(否则为什么你会有一个将它们合并的函数?),那么一个更简洁的设计是将它从 case 中取出:
type T = { tag :: String, theCase :: TCase }
data TCase = T1 { ... } | T2 { ... } | T3 { ... }
fun :: T -> String
fun = _.tag
我有一个带有记录参数的总和类型,记录具有相同类型的相同属性 (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
我想知道是否有更简单、更简洁的方法来做到这一点?
如果你所有的 case 总是有这个字段,并且它的语义在所有 case 中都是相同的(否则为什么你会有一个将它们合并的函数?),那么一个更简洁的设计是将它从 case 中取出:
type T = { tag :: String, theCase :: TCase }
data TCase = T1 { ... } | T2 { ... } | T3 { ... }
fun :: T -> String
fun = _.tag