Haskell中的代数数据类型

时间:2016-01-10 10:14:31

标签: haskell

我试图为数学表达式编写一个简单的数据类型。我现在的代码是:

data Expr
  = Num Double
  | Add Expr Expr
  | Mul Expr Expr
  | Sin Expr
  | Cos Expr
  | X
  deriving Eq

这可以按预期工作,但我想简单一点,只有一行用于二元运算符(Add和Mul),一个用于一元运算符(Sin和Cos)。有什么建议吗?

1 个答案:

答案 0 :(得分:6)

您可以使用,例如,

data BinOp = Add | Mul
data UnaryOp = Sin | Cos

data Expr
  = Num Double
  | Binary BinOp Expr Expr
  | Unary UnaryOp Expr

YMMV是否更简单。