我有一個遞歸創建矩陣的扁平化列表的功能,它必須是可變的,因爲它們的元素在創建時經常更新。到目前爲止,我想出了一個具有簽名遞歸解決方案:將runSTArray映射到STArrays列表中?
doAll :: .. -> [ST s (STArray s (Int, Int) Int)]
的原因,我不返回[UArray (Int,Int) Int]
直接是因爲doAll
被遞歸調用,修改該列表中的矩陣的元素,並追加新的矩陣。我不想凍結和解凍矩陣不必要的。
到目前爲止這麼好。我可以在ghci
runSTArray (matrices !! 0)
runSTArray (matrices !! 1)
檢查(的Array (Int, Int) Int
型)n
個矩陣確實爲我的算法正確的結果。但是,我沒有找到一種方法,在由doAll
返回列表映射runSTUArray
:如果我嘗試在列表遞歸評估或試圖評估包裹在一個單一的元素
map (runSTArray) matrices
Couldn't match expected type `forall s. ST s (STArray s i0 e0)'
with actual type `ST s0 (STArray s0 (Int, Int) Int)'
同樣的問題發生函數
有人可以請解釋發生了什麼(我並不真正瞭解forall
關鍵字的含義)以及如何評估列表中的數組?
http://www.mail-archive.com/[email protected]/msg47957.html –