在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