array-primops 0.2.0.0 → 0.2.0.1
raw patch · 4 files changed
+48/−38 lines, 4 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- GHC/Prim/Array.hs +10/−5
- GHC/Prim/SmallArray.hs +7/−3
- array-primops.cabal +5/−4
- benchmarks/Benchmarks.hs +26/−26
GHC/Prim/Array.hs view
@@ -12,19 +12,16 @@ ) where import GHC.Prim+import GHC.Types --- | Prepend an element to an array.-foreign import prim "consArray" consArray_- :: Any -> Array# a -> Array# a --- | Append an element to the end of an array.+ foreign import prim "snocArray" snocArray_ :: Array# a -> Any -> Array# a foreign import prim "snocArrayWithPadding" snocArrayWithPadding_ :: Int# -> Any -> Array# a -> Any -> Array# a --- | Insert new element at position. foreign import prim "insertArray" insertArray_ :: Int# -> Any -> Array# a -> Array# a @@ -32,19 +29,27 @@ foreign import prim "deleteArray" deleteArray# :: Int# -> Array# a -> Array# a +foreign import prim "consArray" consArray_+ :: Any -> Array# a -> Array# a++-- | Prepend an element to an array. consArray# :: a -> Array# a -> Array# a consArray# a arr = consArray_ (unsafeCoerce# a) arr {-# inline consArray# #-} +-- | Append an element to the end of an array. snocArray# :: Array# a -> a -> Array# a snocArray# arr a = snocArray_ arr (unsafeCoerce# a) {-# inline snocArray# #-} +-- | Append an element to the array and pad the end with another element.+-- The first argument is the size of the padding, the second is the pad element. snocArrayWithPadding# :: Int# -> a -> Array# a -> a -> Array# a snocArrayWithPadding# pad padElem arr a = snocArrayWithPadding_ pad (unsafeCoerce# padElem) arr (unsafeCoerce# a) {-# inline snocArrayWithPadding# #-} +-- | Insert new element at position. insertArray# :: Int# -> a -> Array# a -> Array# a insertArray# i a arr = insertArray_ i (unsafeCoerce# a) arr {-# inline insertArray# #-}
GHC/Prim/SmallArray.hs view
@@ -12,19 +12,18 @@ ) where import GHC.Prim+import GHC.Types --- | Prepend an element to an array.+ foreign import prim "consSmallArray" consSmallArray_ :: Any -> SmallArray# a -> SmallArray# a --- | Append an element to the end of an array. foreign import prim "snocSmallArray" snocSmallArray_ :: SmallArray# a -> Any -> SmallArray# a foreign import prim "snocSmallArrayWithPadding" snocSmallArrayWithPadding_ :: Int# -> Any -> SmallArray# a -> Any -> SmallArray# a --- | Insert new element at position. foreign import prim "insertSmallArray" insertSmallArray_ :: Int# -> Any -> SmallArray# a -> SmallArray# a @@ -32,19 +31,24 @@ foreign import prim "deleteSmallArray" deleteSmallArray# :: Int# -> SmallArray# a -> SmallArray# a +-- | Prepend an element to an array. consSmallArray# :: a -> SmallArray# a -> SmallArray# a consSmallArray# a arr = consSmallArray_ (unsafeCoerce# a) arr {-# inline consSmallArray# #-} +-- | Append an element to the end of an array. snocSmallArray# :: SmallArray# a -> a -> SmallArray# a snocSmallArray# arr a = snocSmallArray_ arr (unsafeCoerce# a) {-# inline snocSmallArray# #-} +-- | Append an element to the array and pad the end with another element.+-- The first argument is the size of the padding, the second is the pad element. snocSmallArrayWithPadding# :: Int# -> a -> SmallArray# a -> a -> SmallArray# a snocSmallArrayWithPadding# pad padElem arr a = snocSmallArrayWithPadding_ pad (unsafeCoerce# padElem) arr (unsafeCoerce# a) {-# inline snocSmallArrayWithPadding# #-} +-- | Insert new element at position. insertSmallArray# :: Int# -> a -> SmallArray# a -> SmallArray# a insertSmallArray# i a arr = insertSmallArray_ i (unsafeCoerce# a) arr {-# inline insertSmallArray# #-}
array-primops.cabal view
@@ -1,6 +1,6 @@ name: array-primops-version: 0.2.0.0+version: 0.2.0.1 synopsis: Extra foreign primops for primitive arrays license: BSD3 license-file: LICENSE@@ -9,7 +9,7 @@ copyright: 2015 András Kovács category: Data build-type: Simple-cabal-version: >=1.10 +cabal-version: >=1.10 description: @@ -28,7 +28,7 @@ GHC.Prim.Array build-depends:- base >= 4.7 && <4.9 ,+ base >= 4.7 && <5, ghc-prim >= 0.3.1.0 c-sources:@@ -46,6 +46,7 @@ cbits/smallArray.cmm test-suite tests+ default-language: Haskell2010 hs-source-dirs: tests main-is: Tests.hs type: exitcode-stdio-1.0@@ -66,4 +67,4 @@ array-primops, criterion >= 1.0 - ghc-options: -O2 -fllvm+ ghc-options: -O2
benchmarks/Benchmarks.hs view
@@ -127,29 +127,29 @@ bgroup "SmallArray" [ bgroup "2" [- bench "prim" $ whnf (insertSA 0 10) sa2,- bench "slow" $ whnf (insertSASlow 0 10) sa2- -- bench "unsafe" $ whnf (insertSAUnsafe 5 10) sa10+ bench "prim" $ whnf (insertSA 0 10) sa2,+ bench "slow" $ whnf (insertSASlow 0 10) sa2,+ bench "unsafe" $ whnf (insertSAUnsafe 0 10) sa2 ], bgroup "5" [- bench "prim" $ whnf (insertSA 2 10) sa5,- bench "slow" $ whnf (insertSASlow 2 10) sa5- -- bench "unsafe" $ whnf (insertSAUnsafe 5 10) sa10+ bench "prim" $ whnf (insertSA 2 10) sa5,+ bench "slow" $ whnf (insertSASlow 2 10) sa5,+ bench "unsafe" $ whnf (insertSAUnsafe 2 10) sa5 ], bgroup "10" [- bench "prim" $ whnf (insertSA 5 10) sa10,- bench "slow" $ whnf (insertSASlow 5 10) sa10- -- bench "unsafe" $ whnf (insertSAUnsafe 5 10) sa10+ bench "prim" $ whnf (insertSA 5 10) sa10,+ bench "slow" $ whnf (insertSASlow 5 10) sa10,+ bench "unsafe" $ whnf (insertSAUnsafe 5 10) sa10 ], bgroup "100" [- bench "prim" $ whnf (insertSA 50 10) sa100,- bench "slow" $ whnf (insertSASlow 50 10) sa100- -- bench "unsafe" $ whnf (insertSAUnsafe 50 10) sa10+ bench "prim" $ whnf (insertSA 50 10) sa100,+ bench "slow" $ whnf (insertSASlow 50 10) sa100,+ bench "unsafe" $ whnf (insertSAUnsafe 50 10) sa100 ], bgroup "1000" [- bench "prim" $ whnf (insertSA 500 10) sa1000,- bench "slow" $ whnf (insertSASlow 500 10) sa1000- -- bench "unsafe" $ whnf (insertSAUnsafe 500 10) sa10+ bench "prim" $ whnf (insertSA 500 10) sa1000,+ bench "slow" $ whnf (insertSASlow 500 10) sa1000,+ bench "unsafe" $ whnf (insertSAUnsafe 500 10) sa1000 ] ] ],@@ -174,28 +174,28 @@ bgroup "SmallArray" [ bgroup "2" [ bench "prim" $ whnf (deleteSA 0) sa2,- bench "slow" $ whnf (deleteSASlow 0) sa2- -- bench "unsafe" $ whnf (deleteSAUnsafe 5) sa10+ bench "slow" $ whnf (deleteSASlow 0) sa2,+ bench "unsafe" $ whnf (deleteSAUnsafe 0) sa10 ], bgroup "5" [ bench "prim" $ whnf (deleteSA 2) sa5,- bench "slow" $ whnf (deleteSASlow 2) sa5- -- bench "unsafe" $ whnf (deleteSAUnsafe 5) sa10+ bench "slow" $ whnf (deleteSASlow 2) sa5,+ bench "unsafe" $ whnf (deleteSAUnsafe 2) sa5 ], bgroup "10" [ bench "prim" $ whnf (deleteSA 5) sa10,- bench "slow" $ whnf (deleteSASlow 5) sa10- -- bench "unsafe" $ whnf (deleteSAUnsafe 5) sa10+ bench "slow" $ whnf (deleteSASlow 5) sa10,+ bench "unsafe" $ whnf (deleteSAUnsafe 5) sa10 ], bgroup "100" [ bench "prim" $ whnf (deleteSA 50) sa100,- bench "slow" $ whnf (deleteSASlow 50) sa100- -- bench "unsafe" $ whnf (deleteSAUnsafe 50) sa10+ bench "slow" $ whnf (deleteSASlow 50) sa100,+ bench "unsafe" $ whnf (deleteSAUnsafe 50) sa100 ], bgroup "1000" [- bench "prim" $ whnf (deleteSA 500) sa1000,- bench "slow" $ whnf (deleteSASlow 500) sa1000- -- bench "unsafe" $ whnf (deleteSAUnsafe 500) sa10+ bench "prim" $ whnf (deleteSA 500) sa1000,+ bench "slow" $ whnf (deleteSASlow 500) sa1000,+ bench "unsafe" $ whnf (deleteSAUnsafe 500) sa1000 ] ] ]