haskell - 如何声明嵌套类型?
问题描述
我有 BoolExpr 类型,我想像这样声明 VarAssociation 类型
data BoolExpr = Var Char |
Const Bool |
Not BoolExpr |
And BoolExpr BoolExpr |
Or BoolExpr BoolExpr |
Impl BoolExpr BoolExpr |
Eq BoolExpr BoolExpr |
Xor BoolExpr BoolExpr
deriving (Eq)
data VarAssociative = VarAssociative {unVar :: Var, unValue :: Bool}
但这是不正确的。我怎样才能做到这一点?我试图分开声明 Var 但它也不起作用。
解决方案
在数据声明中,等号左侧的所有新名称都是新类型名称,而等号右侧的所有新名称都是新的计算名称。类型也是如此BoolExpr
,但Var
它是计算,而不是类型。
代替 "type" Var
,您可以使用包含所有相同字段的类型作为完全应用的Var
计算;在这种情况下,这只是类型的一个字段Char
。所以:
data VarAssociative = VarAssociative
{ unVar :: Char
, unValue :: Bool
}