[Haskell-cafe] Data.Vector.Mutable.mapM

Roman Leshchinskiy rl at cse.unsw.edu.au
Sun Oct 23 16:53:32 CEST 2011

Joachim Breitner wrote:
> Hi,
> I’m consdering to change some performance critical code from Vector to
> MVector, hopefully avoiding a lot of copying and garbage collecting. But
> it seems that the Data.Vector.Mutable interface at
> http://hackage.haskell.org/packages/archive/vector/0.9/doc/html/Data-Vector-Mutable.html
>  is quite limited; e.g. I am missing simple functions having type
>         modifyM :: PrimMonad m => (a -> m a) -> MVector (PrimState m) a ->
> m ()
> that would do something with each element in the vector.

At the moment, the best way to do this is:

modifyM = Data.Vector.Generic.Mutable.transform
        . Data.Vector.Fusion.Stream.Monadic.mapM

Note that transform will return a new vector but that is guaranteed to be
a slice of the original one. Since mapM doesn't change the number of
elements, you can safely ignore the return value as it will be always your
original vector.

> Is this an indication that such use is actually not desired, or is it
> just the case that nobody has developed that yet?

The latter. I need to come up with a nice mechanism for specifying loops
over mutable vectors but this isn't entirely trivial and I haven't had
enough time to really work on this lately.


More information about the Haskell-Cafe mailing list