packages feed

primitive-unlifted 0.1.2.0 → 0.1.3.0

raw patch · 4 files changed

+44/−2 lines, 4 filesdep +bytestringdep +text-shortdep ~basePVP ok

version bump matches the API change (PVP)

Dependencies added: bytestring, text-short

Dependency ranges changed: base

API changes (from Hackage documentation)

+ Data.Primitive.Unlifted.Array: singletonUnliftedArray :: PrimUnlifted a => a -> UnliftedArray a
+ Data.Primitive.Unlifted.Class: instance Data.Primitive.Unlifted.Class.PrimUnlifted Data.ByteString.Short.Internal.ShortByteString
+ Data.Primitive.Unlifted.Class: instance Data.Primitive.Unlifted.Class.PrimUnlifted Data.Text.Short.Internal.ShortText

Files

CHANGELOG.md view
@@ -4,6 +4,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## 0.1.3.0 -- 2020-01-23++* Add `PrimUnlifted` instances for `ShortText` and `ShortByteString`.+* Add `singletonUnliftedArray`.+ ## 0.1.2.0 -- 2019-07-08  * Add `PrimUnlifted` instances for `MVar`, `IORef`, and `STRef`.
primitive-unlifted.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.2 name: primitive-unlifted-version: 0.1.2.0+version: 0.1.3.0 synopsis: Primitive GHC types with unlifted types inside description:   Primitive GHC types with unlifted types inside. There used@@ -24,8 +24,10 @@     Data.Primitive.Unlifted.Class     Data.Primitive.Unlifted.Array   build-depends:-    , base >=4.11.1.0 && <4.14+    , base >=4.11.1.0 && <5+    , bytestring >=0.10.8.2 && <0.11     , primitive >= 0.7 && <0.8+    , text-short >=0.1.3 && <0.2   hs-source-dirs: src   ghc-options: -Wall -O2   default-language: Haskell2010
src/Data/Primitive/Unlifted/Array.hs view
@@ -55,6 +55,7 @@   , cloneUnliftedArray   , cloneMutableUnliftedArray   , emptyUnliftedArray+  , singletonUnliftedArray   , runUnliftedArray     -- * List Conversion   , unliftedArrayToList@@ -303,6 +304,12 @@ emptyUnliftedArray = runUnliftedArray (unsafeNewUnliftedArray 0) {-# NOINLINE emptyUnliftedArray #-} +singletonUnliftedArray :: PrimUnlifted a => a -> UnliftedArray a+{-# INLINE singletonUnliftedArray #-}+singletonUnliftedArray x = runUnliftedArray $ do+  dst <- unsafeNewUnliftedArray 1+  writeUnliftedArray dst 0 x+  pure dst  concatUnliftedArray :: UnliftedArray a -> UnliftedArray a -> UnliftedArray a {-# INLINE concatUnliftedArray #-}
src/Data/Primitive/Unlifted/Class.hs view
@@ -7,6 +7,9 @@   ( PrimUnlifted(..)   ) where +import Data.ByteString.Short.Internal (ShortByteString(SBS))+import Data.Text.Short (ShortText,toShortByteString)+import Data.Text.Short.Unsafe (fromShortByteStringUnsafe) import Data.Primitive.PrimArray (PrimArray(..),MutablePrimArray(..)) import Data.Primitive.ByteArray (ByteArray(..),MutableByteArray(..)) import GHC.MVar (MVar(..))@@ -63,6 +66,31 @@   readUnliftedArray# a i s0 = case Exts.readByteArrayArray# a i s0 of     (# s1, x #) -> (# s1, ByteArray x #)   indexUnliftedArray# a i = ByteArray (Exts.indexByteArrayArray# a i)++instance PrimUnlifted ShortByteString where+  {-# inline writeUnliftedArray# #-}+  {-# inline readUnliftedArray# #-}+  {-# inline indexUnliftedArray# #-}+  type Unlifted ShortByteString = ByteArray#+  toUnlifted# (SBS x) = x+  fromUnlifted# x = SBS x+  writeUnliftedArray# a i (SBS x) = Exts.writeByteArrayArray# a i x+  readUnliftedArray# a i s0 = case Exts.readByteArrayArray# a i s0 of+    (# s1, x #) -> (# s1, SBS x #)+  indexUnliftedArray# a i = SBS (Exts.indexByteArrayArray# a i)++instance PrimUnlifted ShortText where+  {-# inline writeUnliftedArray# #-}+  {-# inline readUnliftedArray# #-}+  {-# inline indexUnliftedArray# #-}+  type Unlifted ShortText = ByteArray#+  toUnlifted# t = case toShortByteString t of { SBS x -> x }+  fromUnlifted# x = fromShortByteStringUnsafe (SBS x)+  writeUnliftedArray# a i t = case toShortByteString t of+    SBS x -> Exts.writeByteArrayArray# a i x+  readUnliftedArray# a i s0 = case Exts.readByteArrayArray# a i s0 of+    (# s1, x #) -> (# s1, fromShortByteStringUnsafe (SBS x) #)+  indexUnliftedArray# a i = fromShortByteStringUnsafe (SBS (Exts.indexByteArrayArray# a i))  -- This uses unsafeCoerce# in the implementation of -- indexUnliftedArray#. This does not lead to corruption FFI codegen