在Haskell中封装数据定义
我正在尝试使用以下其他数据类型定义数据类型:在Haskell中封装数据定义,haskell,types,syntax,Haskell,Types,Syntax,我正在尝试使用以下其他数据类型定义数据类型: data A = Something String | SomethingElse Int data B = Another B | YetAnother A data C = A | B x :: [ C ] x = [ YetAnother (SomethingElse 0), Something "Hello World" ] 但这给了我一个错误,即当我需要类型B时,我不能拥有类型a。这是为什么?您缺少C的数据构造函数 data A =
data A = Something String | SomethingElse Int
data B = Another B | YetAnother A
data C = A | B
x :: [ C ]
x = [ YetAnother (SomethingElse 0), Something "Hello World" ]
但这给了我一个错误,即当我需要类型B时,我不能拥有类型a。这是为什么?您缺少
C
的数据构造函数
data A = Something String
| SomethingElse Int
data B = Another B
| YetAnother A
data C = C0 A
| C1 B
x :: [ C ]
x = [ C1 (YetAnother (SomethingElse 0))
, C0 (Something "Hello World")
]
您缺少
C
的数据构造函数
data A = Something String
| SomethingElse Int
data B = Another B
| YetAnother A
data C = C0 A
| C1 B
x :: [ C ]
x = [ C1 (YetAnother (SomethingElse 0))
, C0 (Something "Hello World")
]
data C=A | B
中的A
和B
是新数据构造函数的声明,而不是对现有类型A
和B
的引用。(构造函数在数据
声明中不是可选的。)数据C=A | B
中的A
和B
是新数据构造函数的声明,而不是对现有类型的引用A
和B
。(构造函数在数据声明中不是可选的。)Haskell没有真正的“union”类型,Haskell中的union必须用构造函数标记。(见附件)
是Haskell中的通用标记联合类型,其中数据标记为Left
或Right
data Either a b = Left a | Right b
Haskell没有真正的“联合”类型,Haskell中的联合必须用构造函数标记。(见附件)
是Haskell中的通用标记联合类型,其中数据标记为Left
或Right
data Either a b = Left a | Right b