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 +5/−0
- primitive-unlifted.cabal +4/−2
- src/Data/Primitive/Unlifted/Array.hs +7/−0
- src/Data/Primitive/Unlifted/Class.hs +28/−0
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