Search code examples
haskellmonadsstate-monad

How to convert a STArray to a List in Haskell?


Is there a function can do what the function arrayToList do:

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)

If not, how to write one?


Solution

  • You don't need IO for this, constructing a list is a pure operation:

    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