[Haskell-cafe] Convert Data.Vector.Unboxed.Mutable.MVector to Data.Vector.Unboxed.Vector

Amos Robinson amos.robinson at gmail.com
Sun Aug 6 03:32:09 UTC 2017


Yes, I believe Data.Vector.Generic.freeze will work. But I would use the
one from Data.Vector.Unboxed unless you really need the generic version.
Sometimes the extra constraints in the generic version can be a bit
cumbersome, requiring extra type annotations where the specific versions
don't.

On Sun, 6 Aug 2017 at 13:22 Cody Goodman <codygman.consulting at gmail.com>
wrote:

> I'm not back at a computer yet, but so I and others reading these archives
> in the future know: Does that mean that freeze from
> Data.Vector.Generic.freeze should work for me then?
>
> On Sat, Aug 5, 2017 at 10:05 PM, Amos Robinson <amos.robinson at gmail.com>
> wrote:
>
>> Mutable is the type family from Vector to MVector. So the result type
>> will be an instance of Vector, but the input MVector doesn't need to be.
>> It's a little confusing that freeze is in Data.Unboxed.Vector, not
>> .Mutable:
>> https://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Unboxed.html#v:freeze
>>
>> On Sun, 6 Aug 2017 at 12:59 Cody Goodman <codygman.consulting at gmail.com>
>> wrote:
>>
>>> I see the type is:
>>>
>>> freeze :: (PrimMonad
>>> <https://hackage.haskell.org/package/primitive-0.6.2.0/docs/Control-Monad-Primitive.html#t:PrimMonad>
>>> m, Vector
>>> <https://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Generic.html#t:Vector>
>>> v a) => Mutable
>>> <https://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Generic.html#t:Mutable>
>>> v (PrimState
>>> <https://hackage.haskell.org/package/primitive-0.6.2.0/docs/Control-Monad-Primitive.html#t:PrimState>
>>> m) a -> m (v a)
>>>
>>>
>>> So there is a Vector constrant that MVector will not have. Does the
>>> Mutable type family get around this somehow?
>>>
>>>
>>> There doesn't seem to be a freeze function specifically for
>>> Data.Vector.Unboxed.Mutable.MVector listed at:
>>> https://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Unboxed-Mutable.html
>>>
>>> Thanks,
>>>
>>> Cody
>>>
>>> On Sat, Aug 5, 2017 at 9:56 PM, Amos Robinson <amos.robinson at gmail.com>
>>> wrote:
>>>
>>>> I think you want "Data.Vector.Generic.freeze", or unsafeFreeze if you
>>>> are sure you won't modify the mutable vector after making it immutable.
>>>>
>>>> https://hackage.haskell.org/package/vector-0.12.0.1/docs/Data-Vector-Generic.html#v:freeze
>>>>
>>>> On Sun, 6 Aug 2017 at 12:46 Cody Goodman <codygman.consulting at gmail.com>
>>>> wrote:
>>>>
>>>>> I want to do this so I can use the Data.Vector.Unboxed.Generic
>>>>> functions requiring the Vector constraint, namely the maxIndex function.
>>>>> Implementing maxIndex for Data.Vector.Unboxed.Mutable.MVector would be
>>>>> useful as well, but I'm even more confused at how to do that or where to
>>>>> begin.
>>>>>
>>>>> Here is some stubbed out code demonstrating this.
>>>>>
>>>>> {-# Language ScopedTypeVariables #-}
>>>>> module Main where
>>>>>
>>>>> import Control.Monad.Primitive
>>>>> import qualified Data.Vector.Unboxed
>>>>> import qualified Data.Vector.Generic as VG
>>>>> import qualified Data.Vector.Unboxed.Mutable as VM
>>>>> import qualified Data.Vector.Unboxed as V
>>>>>
>>>>> toImmutable :: VM.MVector RealWorld Int -> V.Vector Int
>>>>> toImmutable = undefined
>>>>>
>>>>> main :: IO ()
>>>>> main = do
>>>>>   v :: VM.MVector RealWorld Int <- VM.new 1
>>>>>   VM.write v 0 (3 :: Int)
>>>>>   x <- VM.read v 0
>>>>>   -- y <- VG.head . toImmutable $ v
>>>>>   -- print y
>>>>>   print $ VM.length v
>>>>>
>>>>> {-
>>>>> Thanks,
>>>>>
>>>>>
>>>>> Cody
>>>>> -}
>>>>> _______________________________________________
>>>>> Haskell-Cafe mailing list
>>>>> To (un)subscribe, modify options or view archives go to:
>>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>>>> Only members subscribed via the mailman list are allowed to post.
>>>>
>>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170806/d113283c/attachment.html>


More information about the Haskell-Cafe mailing list