如何根据 parent 的数据类型确定 'child' 类型?
How do I determine a 'child' type from a parent's data type?
我不确定我的标题是否真的描述了我所追求的,所以我先展示一段代码:
data IntegralExpression= Value Integer
| Add IntegralExpression IntegralExpression
deriving Show
data BooleanExpression = BValue Bool
| And BooleanExpression BooleanExpression
| Or BooleanExpression BooleanExpression
deriving Show
data ParentExpression = BooleanExpression
| IntegralExpression
deriving Show
按照我的设置方式,ParentExpression 可以是 IntegerExpression 或 BooleanExpression,这对我来说很有意义。但是,我正在尝试完成一个以 ParentExpression 作为输入的函数,它可以(例如)是 'Value 5'(来自 IntegerExpression child class)。但是在编译时,它会说它需要一个 ParentExpression 而不是一个 IntegerExpression。我如何创建 1 个通用 'parent' 来评估任何 child?
我的函数(为简单起见)如下所示:
testConvert :: ParentExpression -> Integer
testConvert (Value n) = n
在我看来,这个函数应该 'understand' 这涉及到我调用的 IntegralExpression:
testConvert (Value 5)
但是,它不会编译,因为 Haskell 需要类型 'ParentExpression' 而我输入 'IntegralExpression'.
所以我的问题是: 我怎样才能创建一个以 parent 数据类型作为类型的函数,它接受其 [=34= 的任何形式的输入]s?
data ParentExpression = BooleanExpression | IntegralExpression
并不像您认为的那样。它的作用是声明一个具有两个 nullary 构造函数的新数据类型,这与之前声明的类似命名的数据类型没有任何共同之处。
在创建新的数据类型时,您总是需要指定一个构造函数名称,例如
data ParentExpression = BExpr BooleanExpression | IExpr IntegralExpression
在 Haskell 中,所有值都明确 "tagged" 及其数据类型构造函数,例如:
testConvert :: ParentExpression -> Integer
testConvert (IExpr (Value n)) = n
Haskell.
中没有隐式类型转换
我不确定我的标题是否真的描述了我所追求的,所以我先展示一段代码:
data IntegralExpression= Value Integer
| Add IntegralExpression IntegralExpression
deriving Show
data BooleanExpression = BValue Bool
| And BooleanExpression BooleanExpression
| Or BooleanExpression BooleanExpression
deriving Show
data ParentExpression = BooleanExpression
| IntegralExpression
deriving Show
按照我的设置方式,ParentExpression 可以是 IntegerExpression 或 BooleanExpression,这对我来说很有意义。但是,我正在尝试完成一个以 ParentExpression 作为输入的函数,它可以(例如)是 'Value 5'(来自 IntegerExpression child class)。但是在编译时,它会说它需要一个 ParentExpression 而不是一个 IntegerExpression。我如何创建 1 个通用 'parent' 来评估任何 child?
我的函数(为简单起见)如下所示:
testConvert :: ParentExpression -> Integer
testConvert (Value n) = n
在我看来,这个函数应该 'understand' 这涉及到我调用的 IntegralExpression:
testConvert (Value 5)
但是,它不会编译,因为 Haskell 需要类型 'ParentExpression' 而我输入 'IntegralExpression'.
所以我的问题是: 我怎样才能创建一个以 parent 数据类型作为类型的函数,它接受其 [=34= 的任何形式的输入]s?
data ParentExpression = BooleanExpression | IntegralExpression
并不像您认为的那样。它的作用是声明一个具有两个 nullary 构造函数的新数据类型,这与之前声明的类似命名的数据类型没有任何共同之处。
在创建新的数据类型时,您总是需要指定一个构造函数名称,例如
data ParentExpression = BExpr BooleanExpression | IExpr IntegralExpression
在 Haskell 中,所有值都明确 "tagged" 及其数据类型构造函数,例如:
testConvert :: ParentExpression -> Integer
testConvert (IExpr (Value n)) = n
Haskell.
中没有隐式类型转换