如何获取 Haskell UArray 的所有元素

How to get all elements of a Haskell UArray

我正在通过尝试构建命令行版本的俄罗斯方块来练习我的 Haskell 技能。对于游戏板,我使用的是 UArray,因为我可以冻结和解冻它,这让我可以查看当前的俄罗斯方块是否与当前放置的棋子发生碰撞,而无需搜索整个棋盘(如果我需要这样做,我需要这样做)使用列表)。我有 运行 问题,我不确定如何将此数组转换为 TextString 以将其输出到控制台。

目前我只使用电路板的一排,我使用以下函数对其进行初始化:

gameBoardWidth = 10 :: Int

initBoard :: UArray Int Char
initBoard = runSTUArray $ do
  let lastCol = gameBoardWidth - 1
  row <- newArray (0,lastCol) ' '
  return row

现在我不确定如何从数组中取出 Char 进行打印。 From the standard Array interface elems 看起来像我需要的,但这似乎不适用于 UArrays

*Main Console Lib Paths_haskell_tetris Data.Array> elems initBoard
 • Couldn't match expected type ‘Array i0 e’
                  with actual type ‘Data.Array.Base.UArray Int Char’

我的另一个想法是尝试在 do 块中使用 readArray 函数,但我不确定如何用函数式语言连接每个字符串的结果

以防万一我的问题与我导入的包有关,这些是我的导入:

import Data.Array.Unboxed
import Data.Array.ST
import Control.Monad
import Control.Monad.ST

您的测试使用 Data.Array.elems,它仅适用于 Array

您需要改为调用 class 方法 Data.Array.IArray.elems,该方法适用于任何不可变数组,包括 UArray.