3

在 Haskell 中处理像移动计算器这样的国际象棋时,我遇到了一个小问题,我不得不使用 Data.Array 将我的棋子保存在一个由 Char 和 Int 定义的位置中。现在我有一个片段列表作为 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]'

非常感谢所有帮助

4

1 回答 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)

它可以帮助其他人解决这个问题吗^_^

于 2012-10-21T13:43:50.467 回答