Improved interface to UArray

Carter Schonwald carter.schonwald at gmail.com
Tue Mar 3 23:39:14 UTC 2020


I meant specifically using PrimMonad, rather than the prim array
facilities, to write the instances

On Tue, Mar 3, 2020 at 5:14 PM Zemyla <zemyla at gmail.com> wrote:

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


More information about the Libraries mailing list