在Haskell中定义数据类型
在编程语言类中,Haskell赋值(创建基本语言在Haskell中定义数据类型,haskell,types,Haskell,Types,在编程语言类中,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
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
,在本例中),足以使其余数据类型以某种隐式方式工作。您需要为每个相应的数据类型定义所有值构造函数。我不太明白你的意思。也许您可以展示一个伪代码示例,说明您认为需要做什么?给定的代码似乎正在工作。你所说的工作是什么意思?这段代码所做的只是为每种数据类型声明选项,而没有定义它们,我错了吗?所以,即使它“起作用”,它实际上还没有做任何事情。我不确定你在这里区分声明和定义是什么意思。是的,它不做任何事情(除了Haskell:-P中的main::IO()
之外没有其他代码),但是数据类型和构造函数已经准备好使用(例如,为它们定义Show
和Read
实例).你不需要定义一个类型
它已经有了由其声明定义的行为。我怀疑你希望编译器读懂你的心思-显然你必须写下每个数据类型是什么。数据类型声明正是这样做的。您可以包含一些伪代码及其预期行为吗?对于编写这些数据声明,您特别不喜欢什么?