primitive v0.6.4.0 Release Notes

Release Date: 2018-05-30 // almost 6 years ago
    • 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 Array failed 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.

    • Add Data.Primitive.MVar, a replacement for Control.Concurrent.MVar that can run in any PrimMonad instead of just IO. It is not a full replacement. Notably, it's missing masking functions and support for adding finalizers.