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