Improved interface to UArray

Zemyla zemyla at gmail.com
Tue Mar 3 22:14:25 UTC 2020


Because a lot of the stuff is defined in GHC.Arr, in base. Also, the Prim
instance for Bool is different than the UArray instance for Bool.

On Tue, Mar 3, 2020, 14:56 chessai . <chessai1996 at gmail.com> wrote:

> Zemlya, could you expound on why you think a primitive dependency is a bad
> idea? I'm just not sure what reasons you have in mind.
>
> Thanks
>
> On Tue, Mar 3, 2020, 12:31 PM Zemyla <zemyla at gmail.com> wrote:
>
>> We should probably use something similar, but I don't think a dependency
>> on primitive is a good idea.
>>
>> On Tue, Mar 3, 2020, 14:28 Carter Schonwald <carter.schonwald at gmail.com>
>> wrote:
>>
>>> Hey Zemyla!
>>> one fuzzy question i have, and perhaps you have a perspective on this,
>>> would/could the PrimMonad machinery in primitive help simplify / clean up
>>> stuff here too?
>>>
>>> On Mon, Feb 24, 2020 at 9:46 AM Zemyla <zemyla at gmail.com> wrote:
>>>
>>>> It's currently hard to describe that a type should be usable with
>>>> UArray or IOUArray, and almost impossible to describe without
>>>> QualifiedConstraints that it should be usable with STUArray. And it's
>>>> actually impossible to use GeneralizedNewtypeDeriving to derive new
>>>> instances of IArray or MArray. It also means that it's difficult to keep
>>>> the three sets of instances in sync.
>>>>
>>>> Therefore, there should be (taking inspiration from primitive) a class
>>>> that describes types which can be used in unboxed arrays. It'd be something
>>>> along the lines of:
>>>>
>>>> class Unboxed e where
>>>>   unsafeNewUArray :: Int# -> e -> State# s -> (# State# s,
>>>> MutableByteArray# s #)
>>>>   unsafeNewUArray_ :: Const (Int# -> State# s -> (# State# s,
>>>> MutableByteArray# s #)) e
>>>>   unsafeReadUArray :: MutableByteArray# s -> Int# -> State# s -> (#
>>>> State# s, e #)
>>>>   unsafeWriteUArray :: MutableByteArray# s -> Int# -> e -> State# s ->
>>>> State# s
>>>>   unsafeIndexUArray :: ByteArray# -> Int# -> e
>>>>
>>>> And then the instances for UArray, STUArray, and IOUArray would be:
>>>>
>>>> instance Unboxed e => IArray UArray e where ...
>>>> instance Unboxed e => MArray IOUArray e IO where ...
>>>> instance Unboxed e => MArray (STUArray s) e (ST s) where ...
>>>>
>>>> Incidentally, this also means it'd be less effort to add instances like
>>>> Unboxed CInt, Unboxed a => Unboxed (Complex a), and Unboxed Ordering.
>>>> _______________________________________________
>>>> Libraries mailing list
>>>> Libraries at haskell.org
>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>>>
>>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20200303/e30fe90e/attachment.html>


More information about the Libraries mailing list