Haskell ST MonadとMutableなVectorの使い方メモ

import Control.Monad.ST (ST,runST)
import Data.Vector (Vector, toList, fromList, thaw, freeze)
import Data.Vector.Mutable (STVector, swap)
import qualified Data.Vector.Mutable as MV (length)
import Data.Vector.Generic.Mutable (reverse)
import Prelude hiding (reverse)

my_reverse :: [a] -> [a]
my_reverse = toList . my_reverse' . fromList 
             
my_reverse' :: Vector a -> Vector a
my_reverse' src = runST $ do
  src' <- thaw src
  reverse src'
  dst <- freeze src'
  return dst