On 02/04/2010, at 12:16, Don Stewart wrote:

> Chad.Scherrer:
>> Hi,
>> 
>> I'd like to be able to do replicateM, but over a vector instead of a list. 
>> Right now I'm doing this:

The operation you are looking for is called newWith. It probably should be 
called replicate.

> Roman? Can we generate frozen arrays for monadic generators, and still fuse in
> the current New/Mutable/MStream architecture?

For monadic stuff, fusion happens on things of type New. For instance, you 
could write this (I'm omitting the class contexts and Data.Vector prefixes):

replicate :: Int -> a -> New a
replicate n x = Generic.New.unstream (Fusion.Stream.replicate n x)

and then either

  Mutable.run (replicate n x)

to get a mutable vector or

  new (replicate n x)

to get an immutable one. You could also chain operations on New, including 
monadic ones:

  v <- Mutable.run $ Generic.New.transform (Fusion.Stream.Monadic.mapM f)
                   $ replicate n x

and this ought to fuse.

Note that the New stuff is quite rough and only really intended for internal 
use at the moment. I wanted to get the "normal" APIs working properly first.

Roman


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to