Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell:希望在数据结构中添加数组字段_Haskell_Ghci - Fatal编程技术网

Haskell:希望在数据结构中添加数组字段

Haskell:希望在数据结构中添加数组字段,haskell,ghci,Haskell,Ghci,我是哈斯克尔的新手。 我想在数据结构中添加一个数组字段,如下所示: data Level = Level { a :: Data.Array.Ix } deriving (Show, Eq, Ord) 但我不知道如何声明字段的类型。它总是给我错误。Data.Array.Ix不是一种类型,而是一类可以用作数组索引的类型(如Int) 您可能希望使用Data.Array.IArray中的Array(用于不可变数组),或IOArray/STArray中的Data.Array.IO或Da

我是哈斯克尔的新手。 我想在数据结构中添加一个数组字段,如下所示:

data Level = Level
    { a :: Data.Array.Ix
    } deriving (Show, Eq, Ord)

但我不知道如何声明字段的类型。它总是给我错误。

Data.Array.Ix
不是一种类型,而是一类可以用作数组索引的类型(如
Int

您可能希望使用
Data.Array.IArray
中的
Array
(用于不可变数组),或
IOArray
/
STArray
中的
Data.Array.IO
Data.Array.ST
(用于可变数组)。类似这样的方法会奏效:

import Data.Array.IArray

type SomeType = String

data Level = Level
  { a :: Data.Array Int SomeType
  } deriving (Show, Eq, Ord)

Ix
不是一个类型,而是一个类型类,
Data.Array
函数使用它来为不同形状的数组提供索引。如果需要数组本身,则需要使用
array
类型。它有两个类型参数:数组中索引的类型,例如
Int
(对于一维数组)或
(Int,Int)
(对于二维数组)以及元素的类型

例如,1D字符数组的类型为
array Int Char
;您可以使用诸如
array
listArray
accumArray
之类的函数创建阵列,例如在GHCi中:

-- A 5-element array of characters
> example1 = listArray (0, 4) "abcde"

> example1 ! 2
'c'

-- A 3-element array of strings
> example2 = array (0, 2) [(0, "this"), (1, "that"), (2, "other")] :: Array Int String

> example2 ! 2
"other"

> example2 ! 3
*** Exception: Ix{Int}.index: Index (3) out of range ((0,2))
二维整数数组的类型为
数组(Int,Int)Int

-- A 3x3 matrix of numbers
> example3 = listArray ((0, 0), (2, 2)) [1..9]

> example3
array ((0,0),(2,2)) [((0,0),1),((0,1),2),((0,2),3),((1,0),4),((1,1),5),((1,2),6),((2,0),7),((2,1),8),((2,2),9)]

> elems example3
[1,2,3,4,5,6,7,8,9]

> bounds example3
((0,0),(2,2))

> example3 ! (1, 2)
6
因此,例如,如果您想表示Tic-Tac趾板,您可以使用以下内容:

import Data.Array

data Board = Board
    { boardCells :: Array (Int, Int) Move
    } deriving (Show, Eq, Ord)

data Move = Empty | X | O

当然,您使用的类型取决于您正在解决的实际问题。

您可能需要类似于
Data.Array.Array Int SomeTypeHere
Data.Array.Ix
的类,而不是类型