ascii-string 1.0.1 → 1.0.1.1
raw patch · 3 files changed
+37/−55 lines, 3 filesdep ~deferred-foldsdep ~primitive-extrasPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: deferred-folds, primitive-extras
API changes (from Hackage documentation)
Files
- ascii-string.cabal +21/−40
- library/AsciiString.hs +13/−13
- library/AsciiString/Prelude.hs +3/−2
ascii-string.cabal view
@@ -1,38 +1,23 @@-name:- ascii-string-version:- 1.0.1-synopsis:- Compact representation of ASCII strings+name: ascii-string+version: 1.0.1.1+synopsis: Compact representation of ASCII strings description: ASCII strings stored using just 7 bits per character. Compared to ByteString, this saves you a whole byte per 8 characters.-homepage:- https://github.com/metrix-ai/ascii-string -bug-reports:- https://github.com/metrix-ai/ascii-string/issues -author:- Nikita Volkov <nikita.y.volkov@mail.ru>-maintainer:- Metrix.AI Tech Team <tech@metrix.ai>-copyright:- (c) 2018, Metrix.AI-license:- MIT-license-file:- LICENSE-build-type:- Simple-cabal-version:- >=1.10+homepage: https://github.com/metrix-ai/ascii-string+bug-reports: https://github.com/metrix-ai/ascii-string/issues+author: Nikita Volkov <nikita.y.volkov@mail.ru>+maintainer: Metrix.AI Tech Team <tech@metrix.ai>+copyright: (c) 2018, Metrix.AI+license: MIT+license-file: LICENSE+build-type: Simple+cabal-version: >=1.10 library- hs-source-dirs:- library- default-extensions:- Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples- default-language:- Haskell2010+ hs-source-dirs: library+ default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples+ default-language: Haskell2010 exposed-modules: AsciiString other-modules:@@ -43,21 +28,17 @@ bytestring >=0.10 && <0.11, cereal >=0.5.5 && <0.6, deepseq >=1.4 && <2,- deferred-folds >=0.6.11 && <0.7,+ deferred-folds >=0.7 && <0.8, foldl >=1.4 && <2, hashable >=1.2.7 && <2, primitive >=0.6.4 && <0.7,- primitive-extras >=0.6.3 && <0.7+ primitive-extras >=0.7 && <0.8 test-suite test- type:- exitcode-stdio-1.0- hs-source-dirs:- test- default-extensions:- Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples- default-language:- Haskell2010+ type: exitcode-stdio-1.0+ hs-source-dirs: test+ default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples+ default-language: Haskell2010 main-is: Main.hs build-depends:
library/AsciiString.hs view
@@ -15,7 +15,7 @@ import qualified Data.List as List import qualified Data.ByteString as ByteString import qualified Data.ByteString.Short.Internal as ShortByteString-import qualified DeferredFolds.UnfoldM as UnfoldM+import qualified DeferredFolds.UnfoldlM as UnfoldlM import qualified AsciiString.FoldMs as FoldMs import qualified Control.Foldl as Foldl import qualified PrimitiveExtras.PrimArray as PrimArray@@ -62,30 +62,30 @@ {-| Construct from a list of septets encoded in 'Word8', ignoring the 8th bit. -} fromSeptetList :: [Word8] -> AsciiString fromSeptetList list = - fromUnfoldM (List.length list) (UnfoldM.foldable list)+ fromUnfoldlM (List.length list) (UnfoldlM.foldable list) {-| Convert from ByteString, ignoring each 8th bit in it. -} fromByteString :: ByteString -> AsciiString fromByteString byteString = - fromUnfoldM (ByteString.length byteString) (UnfoldM.byteStringBytes byteString)+ fromUnfoldlM (ByteString.length byteString) (UnfoldlM.byteStringBytes byteString) {-| Convert from ShortByteString, ignoring each 8th bit in it. -} fromShortByteString :: ShortByteString -> AsciiString fromShortByteString byteString =- fromUnfoldM (ShortByteString.length byteString) (UnfoldM.shortByteStringBytes byteString)+ fromUnfoldlM (ShortByteString.length byteString) (UnfoldlM.shortByteStringBytes byteString) -{-# INLINE fromUnfoldM #-}-fromUnfoldM :: Int -> UnfoldM IO Word8 -> AsciiString-fromUnfoldM size unfoldM =- AsciiString size (unsafeDupablePerformIO (UnfoldM.foldM (FoldMs.sizedSeptetPrimArrayFromSeptets size) unfoldM))+{-# INLINE fromUnfoldlM #-}+fromUnfoldlM :: Int -> UnfoldlM IO Word8 -> AsciiString+fromUnfoldlM size unfoldM =+ AsciiString size (unsafeDupablePerformIO (UnfoldlM.foldM (FoldMs.sizedSeptetPrimArrayFromSeptets size) unfoldM)) {-| Convert to a list of septets represented by 'Word8' with the 8th bit always empty. -} toSeptetList :: AsciiString -> [Word8]-toSeptetList = unsafeDupablePerformIO . UnfoldM.foldM (Foldl.generalize Foldl.list) . toOctetUnfoldM+toSeptetList = unsafeDupablePerformIO . UnfoldlM.foldM (Foldl.generalize Foldl.list) . toOctetUnfoldlM {-| Convert to bytestring. -} toByteString :: AsciiString -> ByteString@@ -97,11 +97,11 @@ primArraySBS :: PrimArray Word8 -> ShortByteString primArraySBS (PrimArray ba) = ShortByteString.SBS ba -toOctetUnfoldM :: AsciiString -> UnfoldM IO Word8-toOctetUnfoldM (AsciiString size pa) = let+toOctetUnfoldlM :: AsciiString -> UnfoldlM IO Word8+toOctetUnfoldlM (AsciiString size pa) = let takeLast = rem (7 * succ size) 8 /= 0- in UnfoldM.mapFoldMInput (FoldMs.overSeptets takeLast) (UnfoldM.primArray pa)+ in UnfoldlM.mapFoldMInput (FoldMs.overSeptets takeLast) (UnfoldlM.primArray pa) runSizedFoldM :: (Int -> FoldM IO Word8 output) -> AsciiString -> IO output runSizedFoldM fold asciiString =- UnfoldM.foldM (fold (length asciiString)) (toOctetUnfoldM asciiString)+ UnfoldlM.foldM (fold (length asciiString)) (toOctetUnfoldlM asciiString)
library/AsciiString/Prelude.hs view
@@ -91,8 +91,9 @@ -- deferred-folds --------------------------import DeferredFolds.Unfold as Exports (Unfold(..))-import DeferredFolds.UnfoldM as Exports (UnfoldM(..))+import DeferredFolds.Unfoldl as Exports (Unfoldl(..))+import DeferredFolds.UnfoldlM as Exports (UnfoldlM(..))+import DeferredFolds.Unfoldr as Exports (Unfoldr(..)) -- hashable -------------------------