hw-prim 0.5.0.2 → 0.5.0.3
raw patch · 25 files changed
+160/−141 lines, 25 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ HaskellWorks.Data.AtIndex: atIndexOr :: AtIndex v => Elem v -> v -> Position -> Elem v
Files
- bench/Main.hs +0/−1
- hw-prim.cabal +2/−2
- src/HaskellWorks/Data/AtIndex.hs +18/−11
- src/HaskellWorks/Data/Char/IsChar.hs +2/−1
- src/HaskellWorks/Data/Concat.hs +7/−6
- src/HaskellWorks/Data/Container.hs +6/−5
- src/HaskellWorks/Data/Drop.hs +10/−9
- src/HaskellWorks/Data/Empty.hs +7/−6
- src/HaskellWorks/Data/Filter.hs +8/−7
- src/HaskellWorks/Data/FromByteString.hs +21/−20
- src/HaskellWorks/Data/Generate.hs +7/−6
- src/HaskellWorks/Data/Head.hs +9/−8
- src/HaskellWorks/Data/Length.hs +12/−11
- src/HaskellWorks/Data/Positioning.hs +2/−2
- src/HaskellWorks/Data/Search.hs +2/−2
- src/HaskellWorks/Data/Snoc.hs +7/−6
- src/HaskellWorks/Data/Take.hs +9/−8
- src/HaskellWorks/Data/TreeCursor.hs +1/−1
- src/HaskellWorks/Data/Uncons.hs +12/−11
- src/HaskellWorks/Data/Vector/AsVector64.hs +2/−1
- src/HaskellWorks/Data/Vector/BoxedVectorLike.hs +4/−3
- src/HaskellWorks/Data/Vector/StorableVectorLike.hs +3/−2
- test/HaskellWorks/Data/FromByteStringSpec.hs +7/−6
- test/HaskellWorks/Data/FromForeignRegionSpec.hs +0/−4
- test/HaskellWorks/Data/SearchSpec.hs +2/−2
bench/Main.hs view
@@ -4,7 +4,6 @@ module Main where import Criterion.Main-import Data.Monoid import Data.Word import Foreign import HaskellWorks.Data.FromForeignRegion
hw-prim.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: e13d367ccce10eb041455fee1fba2f253b49799a2caf12f1c21cdc05f3fc5f84+-- hash: 7744d3568e3de865cd0c785d38ad2c2519a9b44316d31e88a922d3802c35aa05 name: hw-prim-version: 0.5.0.2+version: 0.5.0.3 synopsis: Primitive functions and data types description: Please see README.md category: Data
src/HaskellWorks/Data/AtIndex.hs view
@@ -1,24 +1,27 @@-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeFamilies #-} module HaskellWorks.Data.AtIndex ( Container(..) , AtIndex(..) , Length(..)+ , atIndexOr ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Length-import HaskellWorks.Data.Positioning+import Data.Int+import Data.Word+import HaskellWorks.Data.Length+import HaskellWorks.Data.Positioning +import qualified Data.ByteString as BS+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS+import qualified HaskellWorks.Data.Length as HW+ class Length v => AtIndex v where- (!!!) :: v -> Position -> Elem v- atIndex :: v -> Position -> Elem v+ (!!!) :: v -> Position -> Elem v+ atIndex :: v -> Position -> Elem v instance AtIndex [a] where (!!!) v i = v !! fromIntegral i@@ -133,3 +136,7 @@ atIndex v i = DVS.unsafeIndex v (fromIntegral i) {-# INLINE (!!!) #-} {-# INLINE atIndex #-}++atIndexOr :: AtIndex v => Elem v -> v -> Position -> Elem v+atIndexOr d v p = if p < fromIntegral (HW.length v) then v !!! p else d+{-# INLINE atIndexOr #-}
src/HaskellWorks/Data/Char/IsChar.hs view
@@ -2,8 +2,9 @@ ( IsChar(..) ) where +import Data.Word+ import qualified Data.ByteString.Internal as BI-import Data.Word class IsChar c where toChar :: c -> Char
src/HaskellWorks/Data/Concat.hs view
@@ -6,12 +6,13 @@ ( Concat(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.List as L-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word+import Data.Int+import Data.Word++import qualified Data.ByteString as BS+import qualified Data.List as L+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS -- | Class of values that support vector like operations class Concat v where
src/HaskellWorks/Data/Container.hs view
@@ -6,11 +6,12 @@ ( Container(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word+import Data.Int+import Data.Word++import qualified Data.ByteString as BS+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS class Container a where type Elem a
src/HaskellWorks/Data/Drop.hs view
@@ -7,15 +7,16 @@ , Drop(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.List as L-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container-import HaskellWorks.Data.Positioning-import Prelude hiding (drop)+import Data.Int+import Data.Word+import HaskellWorks.Data.Container+import HaskellWorks.Data.Positioning+import Prelude hiding (drop)++import qualified Data.ByteString as BS+import qualified Data.List as L+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS class Container v => Drop v where drop :: Count -> v -> v
src/HaskellWorks/Data/Empty.hs view
@@ -7,12 +7,13 @@ ( Empty(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container+import Data.Int+import Data.Word+import HaskellWorks.Data.Container++import qualified Data.ByteString as BS+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS class Container a => Empty a where empty :: a
src/HaskellWorks/Data/Filter.hs view
@@ -7,13 +7,14 @@ , Filter(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.List as L-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container+import Data.Int+import Data.Word+import HaskellWorks.Data.Container++import qualified Data.ByteString as BS+import qualified Data.List as L+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS -- | Class of values that support vector like operations class Container v => Filter v where
src/HaskellWorks/Data/FromByteString.hs view
@@ -1,15 +1,16 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-} module HaskellWorks.Data.FromByteString ( FromByteString(..) ) where -import Data.Bits-import qualified Data.ByteString as BS-import qualified Data.Vector.Storable as DVS-import Data.Word+import Data.Bits+import Data.Word +import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS+ -- | Class for byte-string-like datastructures class FromByteString a where -- | Convert a byte string to a value of type @a@@ -20,47 +21,47 @@ fromByteString bs = DVS.unfoldrN (BS.length bs) gen bs where gen :: BS.ByteString -> Maybe (Word8, BS.ByteString) gen cs = case BS.uncons cs of- Just (d, ds) -> Just (d, ds)- Nothing -> Nothing+ Just (d, ds) -> Just (d, ds)+ Nothing -> Nothing instance FromByteString (DVS.Vector Word16) where fromByteString :: BS.ByteString -> DVS.Vector Word16 fromByteString bs = DVS.unfoldrN (BS.length bs `div` 2 + 2) gen bs where gen :: BS.ByteString -> Maybe (Word16, BS.ByteString) gen cs = case BS.uncons cs of- Just (d, ds) -> gen' 8 (fromIntegral d) ds- Nothing -> Nothing+ Just (d, ds) -> gen' 8 (fromIntegral d) ds+ Nothing -> Nothing gen' :: Int -> Word16 -> BS.ByteString -> Maybe (Word16, BS.ByteString) gen' n w cs | n >= 16 = Just (w, cs) | otherwise = case BS.uncons cs of- Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds- Nothing -> Just (w, cs)+ Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds+ Nothing -> Just (w, cs) instance FromByteString (DVS.Vector Word32) where fromByteString :: BS.ByteString -> DVS.Vector Word32 fromByteString bs = DVS.unfoldrN (BS.length bs `div` 4 + 4) gen bs where gen :: BS.ByteString -> Maybe (Word32, BS.ByteString) gen cs = case BS.uncons cs of- Just (d, ds) -> gen' 8 (fromIntegral d) ds- Nothing -> Nothing+ Just (d, ds) -> gen' 8 (fromIntegral d) ds+ Nothing -> Nothing gen' :: Int -> Word32 -> BS.ByteString -> Maybe (Word32, BS.ByteString) gen' n w cs | n >= 32 = Just (w, cs) | otherwise = case BS.uncons cs of- Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds- Nothing -> Just (w, cs)+ Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds+ Nothing -> Just (w, cs) instance FromByteString (DVS.Vector Word64) where fromByteString :: BS.ByteString -> DVS.Vector Word64 fromByteString bs = DVS.unfoldrN (BS.length bs `div` 8 + 8) gen bs where gen :: BS.ByteString -> Maybe (Word64, BS.ByteString) gen cs = case BS.uncons cs of- Just (d, ds) -> gen' 8 (fromIntegral d) ds- Nothing -> Nothing+ Just (d, ds) -> gen' 8 (fromIntegral d) ds+ Nothing -> Nothing gen' :: Int -> Word64 -> BS.ByteString -> Maybe (Word64, BS.ByteString) gen' n w cs | n >= 64 = Just (w, cs) | otherwise = case BS.uncons cs of- Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds- Nothing -> Just (w, cs)+ Just (d, ds) -> gen' (n + 8) (w .|. (fromIntegral d `shiftL` fromIntegral n)) ds+ Nothing -> Just (w, cs)
src/HaskellWorks/Data/Generate.hs view
@@ -7,12 +7,13 @@ , Generate(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container+import Data.Int+import Data.Word+import HaskellWorks.Data.Container++import qualified Data.ByteString as BS+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS -- | Class of values that support vector like operations class Container v => Generate v where
src/HaskellWorks/Data/Head.hs view
@@ -7,14 +7,15 @@ , Head(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.List as L-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container-import Prelude hiding (head)+import Data.Int+import Data.Word+import HaskellWorks.Data.Container+import Prelude hiding (head)++import qualified Data.ByteString as BS+import qualified Data.List as L+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS class Container v => Head v where head :: v -> Elem v
src/HaskellWorks/Data/Length.hs view
@@ -1,20 +1,21 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeFamilies #-} module HaskellWorks.Data.Length ( Container(..) , Length(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.List as L-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container-import HaskellWorks.Data.Positioning-import Prelude hiding (length)+import Data.Int+import Data.Word+import HaskellWorks.Data.Container+import HaskellWorks.Data.Positioning+import Prelude hiding (length)++import qualified Data.ByteString as BS+import qualified Data.List as L+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS class Container v => Length v where length :: v -> Count
src/HaskellWorks/Data/Positioning.hs view
@@ -9,8 +9,8 @@ , toPosition ) where -import Data.Int-import Data.Word+import Data.Int+import Data.Word -- | A value representing a count type Count = Word64
src/HaskellWorks/Data/Search.hs view
@@ -1,6 +1,6 @@ module HaskellWorks.Data.Search- ( binarySearch- ) where+ ( binarySearch+ ) where -- | Perform a binary search in the domain of function @f, bounded by the values @p and @q -- to find the least value @v such that: @w <= (f v)
src/HaskellWorks/Data/Snoc.hs view
@@ -6,12 +6,13 @@ ( Snoc(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container+import Data.Int+import Data.Word+import HaskellWorks.Data.Container++import qualified Data.ByteString as BS+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS class Container v => Snoc v where snoc :: v -> Elem v -> v
src/HaskellWorks/Data/Take.hs view
@@ -7,14 +7,15 @@ , Take(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import qualified Data.List as L-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container-import HaskellWorks.Data.Positioning+import Data.Int+import Data.Word+import HaskellWorks.Data.Container+import HaskellWorks.Data.Positioning++import qualified Data.ByteString as BS+import qualified Data.List as L+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS class Container v => Take v where take :: Count -> v -> v
src/HaskellWorks/Data/TreeCursor.hs view
@@ -7,7 +7,7 @@ ( TreeCursor(..) ) where -import HaskellWorks.Data.Positioning+import HaskellWorks.Data.Positioning class TreeCursor k where firstChild :: k -> Maybe k
src/HaskellWorks/Data/Uncons.hs view
@@ -7,23 +7,24 @@ , Uncons(..) ) where -import qualified Data.ByteString as BS-import Data.Int-import Data.Maybe-import qualified Data.Vector as DV-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Container-import HaskellWorks.Data.Drop-import Prelude hiding (drop)+import Data.Int+import Data.Maybe+import Data.Word+import HaskellWorks.Data.Container+import HaskellWorks.Data.Drop+import Prelude hiding (drop) +import qualified Data.ByteString as BS+import qualified Data.Vector as DV+import qualified Data.Vector.Storable as DVS+ class Drop v => Uncons v where uncons :: v -> Maybe (Elem v, v) instance Uncons String where uncons s = case s of- (x:xs) -> Just (x, xs)- _ -> Nothing+ (x:xs) -> Just (x, xs)+ _ -> Nothing {-# INLINE uncons #-} instance Uncons BS.ByteString where
src/HaskellWorks/Data/Vector/AsVector64.hs view
@@ -3,8 +3,9 @@ ( AsVector64(..) ) where +import Data.Word+ import qualified Data.Vector.Storable as DVS-import Data.Word class AsVector64 a where asVector64 :: a -> DVS.Vector Word64
src/HaskellWorks/Data/Vector/BoxedVectorLike.hs view
@@ -6,9 +6,10 @@ ( BoxedVectorLike(..) ) where -import qualified Data.Vector as DV-import Data.Word-import Foreign.Storable+import Data.Word+import Foreign.Storable++import qualified Data.Vector as DV -- | Class of values that support boxed vector like operations class BoxedVectorLike v e where
src/HaskellWorks/Data/Vector/StorableVectorLike.hs view
@@ -6,9 +6,10 @@ ( StorableVectorLike(..) ) where +import Data.Word+import Foreign.Storable+ import qualified Data.Vector.Storable as DVS-import Data.Word-import Foreign.Storable -- | Class of values that support storable vector like operations class StorableVectorLike v e where
test/HaskellWorks/Data/FromByteStringSpec.hs view
@@ -1,14 +1,15 @@ {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}-{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverloadedLists #-}+{-# LANGUAGE ScopedTypeVariables #-} module HaskellWorks.Data.FromByteStringSpec (spec) where -import qualified Data.ByteString as BS-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.FromByteString-import Test.Hspec+import Data.Word+import HaskellWorks.Data.FromByteString+import Test.Hspec++import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS {-# ANN module ("HLint: Ignore Redundant do" :: String) #-}
test/HaskellWorks/Data/FromForeignRegionSpec.hs view
@@ -9,12 +9,8 @@ import Control.Monad.IO.Class import Data.Word-import Data.Word-import HaskellWorks.Data.FromByteString-import HaskellWorks.Data.FromForeignRegion import HaskellWorks.Hspec.Hedgehog import Hedgehog-import Hedgehog.Internal.Gen import Test.Hspec import qualified Data.ByteString as BS
test/HaskellWorks/Data/SearchSpec.hs view
@@ -2,8 +2,8 @@ module HaskellWorks.Data.SearchSpec (spec) where -import HaskellWorks.Data.Search-import Test.Hspec+import HaskellWorks.Data.Search+import Test.Hspec {-# ANN module ("HLint: Ignore Redundant do" :: String) #-}