例子:
data A =
A B D
| Aa B C
| Ag B X X
| Ae B R Q
| Ax X
getB a = case a of
(A b _) -> b
(Aa b _) -> b
(Ag b _ _) -> b
(Ae b _ _) -> b
(Ax _) -> somethingElse
在 Haskell 中,给定一个数据类型,其中许多构造函数具有相同的参数类型,有没有更好的方法来返回这个参数。或者有没有更好的方法来编写上面显示的
case
语句以减少重复? 最佳答案
您可以使用记录语法来解决这个问题:
data A =
A {fieldB :: B, fieldC :: C} |
Aa {fieldB :: B, fieldX1 :: X, fieldX2 :: X} |
Ag {fieldB :: B, fieldR :: R, fieldQ :: Q} |
Ax {fieldX :: X}
getB a = case a of
Ax -> somethingElse
_ -> fieldB a
关键是为
B
类型的所有字段赋予相同的名称。关于Haskell:有没有更好的方法来编写具有相同 RHS 的 case 语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28247138/