2012-12-23 21 views
0

是否有一个功能,可以做什么功能arrayToList做:如何将STArray转换为Haskell中的列表?

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) 

如果不是,怎么写呢?

+0

>更新'genArray :: IO [INT]'到'genArrat :: ST s [Int]' – RnMss

回答

6

你不需要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 
+0

噢,我很抱歉,它是'ST s [Int]'而不是'IO [Int]'。 – RnMss

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 
+0

您的答案解决了这个问题,但是,我输错了。非常遗憾。 – RnMss