#include "phases.h"
module Data.Vector.MVector.Mut (
Mut(..), run, unstream, update, reverse, map
) where
import qualified Data.Vector.MVector as MVector
import Data.Vector.MVector ( MVector )
import Data.Vector.Stream ( Stream )
import Prelude hiding ( reverse, map )
data Mut a = Mut (forall m mv. MVector mv m a => m (mv a))
run :: MVector mv m a => Mut a -> m (mv a)
run (Mut p) = p
trans :: Mut a -> (forall m mv. MVector mv m a => mv a -> m ()) -> Mut a
trans (Mut p) q = Mut (do { v <- p; q v; return v })
unstream :: Stream a -> Mut a
unstream s = Mut (MVector.unstream s)
update :: Mut a -> Stream (Int, a) -> Mut a
update m s = trans m (\v -> MVector.update v s)
reverse :: Mut a -> Mut a
reverse m = trans m (MVector.reverse)
map :: (a -> a) -> Mut a -> Mut a
map f m = trans m (MVector.map f)