私は、ツリーからマトリクスのフラット化されたリストを再帰的に作成する関数を持っています。私は直接[UArray (Int,Int) Int]
を返さない理由はdoAll
が再帰的に呼び出されるため、あるリスト内の行列の要素を変更し、新しい行列を追加しSTArraysのリストにrunSTArrayをマップしますか?
doAll :: .. -> [ST s (STArray s (Int, Int) Int)]
:これまでのところ私は署名を持っている再帰的な解決策が出ています。私は行列を不必要に凍結し解凍したくない。
これまでのところとても良いです。私はghci
runSTArray (matrices !! 0)
runSTArray (matrices !! 1)
に(タイプArray (Int, Int) Int
の)n
番目の行列を検査することができますし、実際に私は私のアルゴリズムのための正しい結果を得ます。私は、リストの上に再帰的に評価するかに包まれた単一の要素を評価しようとしようとした場合
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)'
同じ問題が起こる:しかし、私はdoAll
によって返されたリスト上runSTUArray
をマッピングする方法を見つけることができませんでした関数
何か起こっていることを説明してもらえますか(私はforall
キーワードの意味を本当に理解できませんでした)、リストの配列をどのように評価することができましたか?
http://www.mail-archive.com/[email protected]/msg47957.html –