[Haskell-cafe] ANN: primitive

Dr.Koster drkoster at qq.com
Wed May 30 20:19:23 UTC 2018

I have make some comments on reddit, but still I want to record them here:
After reading the new code, I got a feeling that there're some API lacking considerations. Here is some of my personal concerns:

The generalized MVar is basically useless because ST is meant to seal its state token, you won't want to add a forkST. You can argue that the atomic operations on MutVar is already added, but still I want to justify its usefulness.

There're too much combinators added to PrimArray, is there a plan to port these to other arrays? 

If we ever provide toList operations, then I would really want it to be a good producer in base's fold-build fusion' view, it's robust and easy to implement, and folding is basically the same speed with List.fold and toList.

Anyway it seems I missed the bike shedding, but still I want to thank for all the efforts, I'll try to follow new GitHub workflow more closely.


------------------ Original ------------------
From: Carter Schonwald <carter.schonwald at gmail.com>
Date: Thu,May 31,2018 2:55 AM
To: haskell-cafe <haskell-cafe at haskell.org>, Haskell Libraries <libraries at haskell.org>
Subject: Re: [Haskell-cafe] ANN: primitive

This is a pretty exciting (albeit minor version)

I'd like to especially thank David Feuer (treeowl ) and Andrew Martin (andrewthad) for their contributions

the change log has a huge number of bug fixes relative to 0.6.2-3

also we added some new modules of features 

PrimArray --- unboxed nonsliceable vectors
MVar -- Mvars that run in any PrimMonad

augmented the Data.Primitive exports for increased consistency 
(the new .Ptr and .Mvar modules aren't exported in this minor version so users can easily migrate)

Changes in version

Introduce Data.Primitive.PrimArray, which offers types and function for dealing with a ByteArray tagged with a phantom type variable for tracking the element type.

Implement isByteArrayPinned and isMutableByteArrayPinned.

Add Eq1, Ord1, Show1, and Read1 instances for Array and SmallArray.

Improve the test suite. This includes having property tests for typeclasses from base such as Eq, Ord, Functor, Applicative, Monad, IsList, Monoid, Foldable, and Traversable.

Fix the broken IsList instance for ByteArray. The old definition would allocate a byte array of the correct size and then leave the memory unitialized instead of writing the list elements to it.

Fix the broken Functor instance for Array. The old definition would allocate an array of the correct size with thunks for erroring installed at every index. It failed to replace these thunks with the result of the function applied to the elements of the argument array.

Fix the broken Applicative instances of Array and SmallArray. The old implementation of <*> for Arrayfailed to initialize some elements but correctly initialized others in the resulting Array. It is unclear what the old behavior of <*> was for SmallArray, but it was incorrect.

Fix the broken Monad instances for Array and SmallArray.

Fix the implementation of foldl1 in the Foldable instances for Array and SmallArray. In both cases, the old implementation simply returned the first element of the array and made no use of the other elements in the array.

Fix the implementation of mconcat in the Monoid instance for SmallArray.

Implement Data.Primitive.Ptr, implementations of Ptr functions that require a Prim constraint instead of a Storable constraint.

Add PrimUnlifted instances for TVar and MVar.

Use compareByteArrays# for the Eq and Ord instances of ByteArray when building with GHC 8.4 and newer.

Add Prim instances for lots of types in Foreign.C.Types and System.Posix.Types.

Reexport Data.Primitive.SmallArray and Data.Primitive.UnliftedArray from Data.Primitive.

Add fold functions and map function to Data.Primitive.UnliftedArray. Add typeclass instances for IsList, Ord, and Show.

Add defaultSetByteArray# and defaultSetOffAddr# to Data.Primitive.Types.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20180531/dcfa3729/attachment.html>

More information about the Libraries mailing list