首页 > 解决方案 > 如何声明嵌套类型?

问题描述

我有 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 但它也不起作用。

标签: haskell

解决方案


在数据声明中,等号左侧的所有新名称都是新类型名称,而等号右侧的所有新名称都是新的计算名称。类型也是如此BoolExpr,但Var它是计算,而不是类型。

代替 "type" Var,您可以使用包含所有相同字段的类型作为完全应用的Var计算;在这种情况下,这只是类型的一个字段Char。所以:

data VarAssociative = VarAssociative
    { unVar :: Char
    , unValue :: Bool
    }

推荐阅读