Improved interface to UArray

chessai . chessai1996 at gmail.com
Tue Mar 3 20:56:29 UTC 2020


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/faac0a44/attachment.html>


More information about the Libraries mailing list