在 Haskell 中创建我自己类型的二维列表时出错
Errors upon creation of 2d list of my own types in Haskell
基本上我已经创建了一个具有三个属性的类型,我们称之为 "Foo"
type Foo = Foo Att1 Att2 Att3
每个属性都是 3 个值之一,我用这种格式声明每个属性:
data Att1 = A | B | C
现在,在对何时使用 "data" 或 "type" 之间的区别进行了一些猜测之后,我尝试制作 Foo 的二维列表:
type fooList = fooList [[Foo A A A, Foo B A C], [Foo C A B, Foo B B A]]
编辑:当我 assemble 这个列表
时,我也遇到同样的错误
data fooList = fooList [[Foo A A A, Foo B A C], [Foo C A B, Foo B B A]]
编译时这会导致两个主要错误:
Not in scope: type constructor or class ‘A’
A data constructor of that name is in scope; did you mean DataKinds?
和
Illegal Type ["Copy of foolist"]. Perhaps you intended to use DataKinds
我哪里错了?我或多或少地尝试过跟随 learnyouahaskell 到发球区,但无论我尝试了多少种方法,我都会不断收到类似的错误。
首先Foo
的定义是错误的。由于这里包含多个值,并且Foo
不是已经定义的类型,所以需要这样构造:
<b>data</b> Foo = Foo Att1 Att2 Att3
如果你定义了type Foo = Foo Att1 Att2 Att3
那么你定义了一个类型别名,但是定义一个相同类型的类型别名(如此递归地)在这里没有多大意义。
此外 Att2
和 Att3
可能只是 Att1
s:
data Foo = Foo Att1 Att<b>1</b> Att<b>1</b>
此外,您 不需要 需要 type
或 data
来声明一个值。您可以通过将其指定为:
来创建二维列表
fooList = [[Foo A A A, Foo B A C], [Foo C A B, Foo B B A]]
所以这里我们声明了一个存储值的变量:一个列表的列表,每个元素是一个Foo
项。
基本上我已经创建了一个具有三个属性的类型,我们称之为 "Foo"
type Foo = Foo Att1 Att2 Att3
每个属性都是 3 个值之一,我用这种格式声明每个属性:
data Att1 = A | B | C
现在,在对何时使用 "data" 或 "type" 之间的区别进行了一些猜测之后,我尝试制作 Foo 的二维列表:
type fooList = fooList [[Foo A A A, Foo B A C], [Foo C A B, Foo B B A]]
编辑:当我 assemble 这个列表
时,我也遇到同样的错误data fooList = fooList [[Foo A A A, Foo B A C], [Foo C A B, Foo B B A]]
编译时这会导致两个主要错误:
Not in scope: type constructor or class ‘A’
A data constructor of that name is in scope; did you mean DataKinds?
和
Illegal Type ["Copy of foolist"]. Perhaps you intended to use DataKinds
我哪里错了?我或多或少地尝试过跟随 learnyouahaskell 到发球区,但无论我尝试了多少种方法,我都会不断收到类似的错误。
首先Foo
的定义是错误的。由于这里包含多个值,并且Foo
不是已经定义的类型,所以需要这样构造:
<b>data</b> Foo = Foo Att1 Att2 Att3
如果你定义了type Foo = Foo Att1 Att2 Att3
那么你定义了一个类型别名,但是定义一个相同类型的类型别名(如此递归地)在这里没有多大意义。
此外 Att2
和 Att3
可能只是 Att1
s:
data Foo = Foo Att1 Att<b>1</b> Att<b>1</b>
此外,您 不需要 需要 type
或 data
来声明一个值。您可以通过将其指定为:
fooList = [[Foo A A A, Foo B A C], [Foo C A B, Foo B B A]]
所以这里我们声明了一个存储值的变量:一个列表的列表,每个元素是一个Foo
项。