例子:

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/

10-11 18:48