我在编程语言类中为Haskell赋值(创建基本语言W
)提供了以下数据类型:
data WValue = VInt Int
| VBool Bool
deriving (Eq, Show)
data WExp = Val WValue
| Var String
| Plus WExp WExp
| Minus WExp WExp
| Multiplies WExp WExp
| Divides WExp WExp
| Equals WExp WExp
| NotEqual WExp WExp
| Less WExp WExp
| Greater WExp WExp
| LessOrEqual WExp WExp
| GreaterOrEqual WExp WExp
| And WExp WExp
| Or WExp WExp
| Not WExp
data WStmt = Empty
| VarDecl String WExp
| Assign String WExp
| If WExp WStmt WStmt
| While WExp WStmt
| Block [WStmt]
我的问题 - 可能是愚蠢的 - 我是否需要为所有数据类型定义所有值构造函数,或者,如果,例如,定义最高级别的数据类型(在本例中为WStmt
),足以使其余的数据类型以某种隐式方式工作。