module VectorShuffling.Immutable
where

import           VectorShuffling.Prelude
import           Data.Vector
import qualified VectorShuffling.Mutable as B
import qualified System.Random           as A


shuffle :: Vector a -> A.StdGen -> (Vector a, A.StdGen)
shuffle vector gen =
  runST $ do
    mutable <- thaw vector
    gen'    <- B.shuffle mutable gen
    frozen  <- unsafeFreeze mutable
    return (frozen, gen')