1

関数が行うことを実行できる関数はありますかarrayToList:

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

genArray :: ST s [Int]
genArray = do
   a <- new Array (0, 99) 0 :: ST s (STArray s Int Int)
   writeArray a 0 1
   {- ... write something to the array ... -}
   return arrayToList(a)

そうでない場合、どのように書くのですか?

4

2 に答える 2

7

これは必要ありませんIO。リストの作成は純粋な操作です。

genArray :: [Int]
genArray = runST $ do
  a <- newArray (0, 99) 0 :: ST s (STArray s Int Int)
  writeArray a 0 1
  {- ... write something to the array ... -}
  getElems a
于 2012-12-23T14:16:29.867 に答える
1

stToIO と getElems を使用します。

genArray :: IO [Int]
genArray = stToIO $ do
    a <- newArray (0,99) 0 :: ST s (STArray s Int Int)
    writeArray a 0 1
    getElems a
于 2012-12-23T14:11:28.443 に答える