{-# LANGUAGE Rank2Types #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Permute.ST -- Copyright : Copyright (c) , Patrick Perry -- License : BSD3 -- Maintainer : Patrick Perry -- Stability : experimental -- -- Mutable permutations in the 'ST' monad. module Data.Permute.ST ( -- * Permutations STPermute, runSTPermute, -- * Overloaded mutable permutation interface module Data.Permute.MPermute ) where import Control.Monad.ST import Data.Permute.Base( Permute, STPermute, unsafeFreezeSTPermute ) import Data.Permute.MPermute -- | A safe way to create and work with a mutable permutation before returning -- an immutable one for later perusal. This function avoids copying the -- permutation before returning it - it uses unsafeFreeze internally, but this -- wrapper is a safe interface to that function. runSTPermute :: (forall s. ST s (STPermute s)) -> Permute runSTPermute p = runST (p >>= unsafeFreezeSTPermute) {-# INLINE runSTPermute #-}