Ix
- это не тип, а класс типов, используемый функциями Data.Array
для индексирования различных форм массива.Если вам нужен сам массив, вам нужно использовать тип Array
.Он имеет два параметра типа: тип индексов в массиве, например Int
(для одномерного массива) или (Int, Int)
(для двумерного массива), и тип элементов.
Так что дляНапример, одномерный массив символов будет иметь тип 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))
2D-массив целых чисел будет иметь тип Array (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
Так, например, если вы хотите представить доску «крестики-нолики», вы можете использовать что-то вроде:
import Data.Array
data Board = Board
{ boardCells :: Array (Int, Int) Move
} deriving (Show, Eq, Ord)
data Move = Empty | X | O
Какие типы вы используете, зависит от конкретной проблемы, с которой вы столкнулись »Решая, конечно.