Haskell列表转换为数组

3

我正在使用Haskell编写类似于国际象棋的走法计算器,但遇到了一些问题。我的任务要求我使用Data.Array将我的棋子以Char和Int定义的Position保存起来。现在我有一个棋子列表作为输入,并使用writeToArray函数进行尝试,但是我一直得到错误提示。请问有谁知道我做错了什么吗?

以下是代码:

data Squares = Squares {array :: Array Pos Piece}
data Pos = Pos Char Int deriving (Eq, Ord, Ix)
data Piece = Piece { piecetype :: PieceType, color :: PieceColor } | Empty

writeToArray :: [Piece] ->(Array Pos Piece)
writeToArray (x:xs) = (((Pos 'a' 1), (Pos 'h' 8)) [((Pos char int), x) | char <- ['a'..'h'], int <- [1..8]])` : writeToArray (xs)

它给出的错误信息如下:

Couldn't match expected type `Array Pos Piece' with actual type '[a0]'

All help is appreciated greatly


writeToArray的返回类型是List。 - arrowd
1个回答

4

问题解决了!

将writeToArray函数更改为如下内容:

writeToArray :: [Piece] ->(Array Pos Piece)
writeToArray  list = Data.Array.array (Pos 'a' 1, Pos 'h' 8) (zip  [(Pos char int)| char <- ['a'..'h'], int <- [1..8]] list)

希望这篇文章能帮助其他遇到同样问题的人 ^_^


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接