hw-balancedparens 0.2.0.2 → 0.2.0.3
raw patch · 6 files changed
+116/−89 lines, 6 filesdep +deepseqdep ~criteriondep ~hw-excessPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: deepseq
Dependency ranges changed: criterion, hw-excess
API changes (from Hackage documentation)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (HaskellWorks.Data.BalancedParens.RangeMinMax.RangeMinMax a)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: instance GHC.Generics.Generic (HaskellWorks.Data.BalancedParens.RangeMinMax.RangeMinMax a)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (HaskellWorks.Data.BalancedParens.RangeMinMax2.RangeMinMax2 a)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: instance GHC.Generics.Generic (HaskellWorks.Data.BalancedParens.RangeMinMax2.RangeMinMax2 a)
- HaskellWorks.Data.BalancedParens.RangeMinMax: RangeMinMax :: !a -> !(Vector Int8) -> !(Vector Int8) -> !(Vector Int8) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> RangeMinMax a
+ HaskellWorks.Data.BalancedParens.RangeMinMax: RangeMinMax :: !a -> !Vector Int8 -> !Vector Int8 -> !Vector Int8 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> RangeMinMax a
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL0Excess] :: RangeMinMax a -> !(Vector Int8)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL0Excess] :: RangeMinMax a -> !Vector Int8
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL0Max] :: RangeMinMax a -> !(Vector Int8)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL0Max] :: RangeMinMax a -> !Vector Int8
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL0Min] :: RangeMinMax a -> !(Vector Int8)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL0Min] :: RangeMinMax a -> !Vector Int8
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL1Excess] :: RangeMinMax a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL1Excess] :: RangeMinMax a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL1Max] :: RangeMinMax a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL1Max] :: RangeMinMax a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL1Min] :: RangeMinMax a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL1Min] :: RangeMinMax a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL2Excess] :: RangeMinMax a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL2Excess] :: RangeMinMax a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL2Max] :: RangeMinMax a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL2Max] :: RangeMinMax a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL2Min] :: RangeMinMax a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax: [rangeMinMaxL2Min] :: RangeMinMax a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: RangeMinMax2 :: !a -> !(Vector Int8) -> !(Vector Int8) -> !(Vector Int8) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> !(Vector Int16) -> RangeMinMax2 a
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: RangeMinMax2 :: !a -> !Vector Int8 -> !Vector Int8 -> !Vector Int8 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> !Vector Int16 -> RangeMinMax2 a
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L0Excess] :: RangeMinMax2 a -> !(Vector Int8)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L0Excess] :: RangeMinMax2 a -> !Vector Int8
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L0Max] :: RangeMinMax2 a -> !(Vector Int8)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L0Max] :: RangeMinMax2 a -> !Vector Int8
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L0Min] :: RangeMinMax2 a -> !(Vector Int8)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L0Min] :: RangeMinMax2 a -> !Vector Int8
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L1Excess] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L1Excess] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L1Max] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L1Max] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L1Min] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L1Min] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L2Excess] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L2Excess] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L2Max] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L2Max] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L2Min] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L2Min] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L3Excess] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L3Excess] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L3Max] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L3Max] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L3Min] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L3Min] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L4Excess] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L4Excess] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L4Max] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L4Max] :: RangeMinMax2 a -> !Vector Int16
- HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L4Min] :: RangeMinMax2 a -> !(Vector Int16)
+ HaskellWorks.Data.BalancedParens.RangeMinMax2: [rangeMinMax2L4Min] :: RangeMinMax2 a -> !Vector Int16
Files
- LICENSE +1/−1
- README.md +2/−1
- bench/Main.hs +22/−11
- hw-balancedparens.cabal +74/−67
- src/HaskellWorks/Data/BalancedParens/RangeMinMax.hs +5/−1
- src/HaskellWorks/Data/BalancedParens/RangeMinMax2.hs +12/−8
LICENSE view
@@ -1,4 +1,4 @@-Copyright John Ky (c) 2016+Copyright John Ky (c) 2016-2019 All rights reserved.
README.md view
@@ -1,2 +1,3 @@ # hw-balancedparens-[](https://circleci.com/gh/haskell-works/hw-balancedparens/tree/0.0-branch)++[](https://circleci.com/gh/haskell-works/hw-balancedparens)
bench/Main.hs view
@@ -2,21 +2,26 @@ module Main where -import Criterion.Main-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.BalancedParens.FindClose-import HaskellWorks.Data.BalancedParens.RangeMinMax-import HaskellWorks.Data.Bits.Broadword-import HaskellWorks.Data.Bits.FromBitTextByteString-import HaskellWorks.Data.Naive+import Criterion.Main+import Data.Word+import HaskellWorks.Data.BalancedParens.FindClose+import HaskellWorks.Data.Bits.Broadword+import HaskellWorks.Data.Bits.FromBitTextByteString+import HaskellWorks.Data.Naive +import qualified Data.Vector.Storable as DVS+import qualified HaskellWorks.Data.BalancedParens.RangeMinMax as RMM+import qualified HaskellWorks.Data.BalancedParens.RangeMinMax2 as RMM2+ setupEnvVector :: Int -> IO (DVS.Vector Word64) setupEnvVector n = return $ DVS.fromList (take n (cycle [maxBound, 0])) -setupEnvRmmVector :: Int -> IO (RangeMinMax (DVS.Vector Word64))-setupEnvRmmVector n = return $ mkRangeMinMax $ DVS.fromList (take n (cycle [maxBound, 0]))+setupEnvRmmVector :: Int -> IO (RMM.RangeMinMax (DVS.Vector Word64))+setupEnvRmmVector n = return $ RMM.mkRangeMinMax $ DVS.fromList (take n (cycle [maxBound, 0])) +setupEnvRmm2Vector :: Int -> IO (RMM2.RangeMinMax2 (DVS.Vector Word64))+setupEnvRmm2Vector n = return $ RMM2.mkRangeMinMax2 $ DVS.fromList (take n (cycle [maxBound, 0]))+ setupEnvBP2 :: IO Word64 setupEnvBP2 = return $ DVS.head (fromBitTextByteString "10") @@ -61,7 +66,13 @@ [ bench "Broadword" (whnf (findClose (Broadword w)) 1) , bench "Naive" (whnf (findClose (Naive w)) 1) ]- , env (setupEnvVector 1000000) $ \bv -> bgroup "RangeMinMax"+ , env (setupEnvVector 1000000) $ \bv -> bgroup "Vanilla"+ [ bench "findClose" (nf (map (findClose bv)) [0, 1000..10000000])+ ]+ , env (setupEnvRmmVector 1000000) $ \bv -> bgroup "RangeMinMax"+ [ bench "findClose" (nf (map (findClose bv)) [0, 1000..10000000])+ ]+ , env (setupEnvRmm2Vector 1000000) $ \bv -> bgroup "RangeMinMax2" [ bench "findClose" (nf (map (findClose bv)) [0, 1000..10000000]) ] ]
hw-balancedparens.cabal view
@@ -1,9 +1,7 @@--- This file has been generated from package.yaml by hpack version 0.18.1.------ see: https://github.com/sol/hpack+cabal-version: 2.2 name: hw-balancedparens-version: 0.2.0.2+version: 0.2.0.3 synopsis: Balanced parentheses description: Balanced parentheses. category: Data, Bit, Succinct Data Structures, Data Structures@@ -11,84 +9,93 @@ bug-reports: https://github.com/haskell-works/hw-balancedparens/issues author: John Ky maintainer: newhoggy@gmail.com-copyright: 2016 John Ky-license: BSD3+copyright: 2016-2019 John Ky+license: BSD-3-Clause license-file: LICENSE-tested-with: GHC == 8.4.2, GHC == 8.2.2, GHC == 8.0.2, GHC == 7.10.3+tested-with: GHC == 8.6.5, GHC == 8.4.4, GHC == 8.2.2 build-type: Simple-cabal-version: >= 1.10- extra-source-files:- README.md+ README.md source-repository head- type: git+ type: git location: https://github.com/haskell-works/hw-balancedparens +common base { build-depends: base >= 4 && < 5 }++common QuickCheck { build-depends: QuickCheck >= 2.10 && < 2.12 }+common criterion { build-depends: criterion >= 1.2 && < 1.6 }+common deepseq { build-depends: deepseq >= 1.4.2.0 && < 1.5 }+common hspec { build-depends: hspec >= 2.2 && < 2.6 }+common hw-bits { build-depends: hw-bits >= 0.4.0.0 && < 0.8 }+common hw-excess { build-depends: hw-excess >= 0.2.0.3 && < 0.3 }+common hw-prim { build-depends: hw-prim >= 0.4.0.0 && < 0.7 }+common hw-rankselect-base { build-depends: hw-rankselect-base >= 0.2.0.0 && < 0.4 }+common vector { build-depends: vector >= 0.12 && < 0.13 }++common config+ default-language: Haskell2010+ ghc-options: -Wall -O2 -msse4.2+ library- hs-source-dirs:- src- ghc-options: -Wall -O2 -msse4.2- build-depends:- base >=4 && <5- , hw-bits >=0.4.0.0 && < 0.8- , hw-prim >=0.4.0.0 && < 0.7- , vector >= 0.12 && < 0.13- , hw-excess >=0.2.0.0 && < 0.3- , hw-rankselect-base >=0.2.0.0 && < 0.4+ import: base, config+ , deepseq+ , hw-bits+ , hw-excess+ , hw-prim+ , hw-rankselect-base+ , vector exposed-modules:- HaskellWorks.Data.BalancedParens- HaskellWorks.Data.BalancedParens.BalancedParens- HaskellWorks.Data.BalancedParens.Broadword- HaskellWorks.Data.BalancedParens.CloseAt- HaskellWorks.Data.BalancedParens.Enclose- HaskellWorks.Data.BalancedParens.FindClose- HaskellWorks.Data.BalancedParens.FindCloseN- HaskellWorks.Data.BalancedParens.FindOpen- HaskellWorks.Data.BalancedParens.FindOpenN- HaskellWorks.Data.BalancedParens.NewCloseAt- HaskellWorks.Data.BalancedParens.NewOpenAt- HaskellWorks.Data.BalancedParens.OpenAt- HaskellWorks.Data.BalancedParens.RangeMinMax- HaskellWorks.Data.BalancedParens.RangeMinMax2- HaskellWorks.Data.BalancedParens.Simple- other-modules:- Paths_hw_balancedparens- default-language: Haskell2010+ HaskellWorks.Data.BalancedParens+ HaskellWorks.Data.BalancedParens.BalancedParens+ HaskellWorks.Data.BalancedParens.Broadword+ HaskellWorks.Data.BalancedParens.CloseAt+ HaskellWorks.Data.BalancedParens.Enclose+ HaskellWorks.Data.BalancedParens.FindClose+ HaskellWorks.Data.BalancedParens.FindCloseN+ HaskellWorks.Data.BalancedParens.FindOpen+ HaskellWorks.Data.BalancedParens.FindOpenN+ HaskellWorks.Data.BalancedParens.NewCloseAt+ HaskellWorks.Data.BalancedParens.NewOpenAt+ HaskellWorks.Data.BalancedParens.OpenAt+ HaskellWorks.Data.BalancedParens.RangeMinMax+ HaskellWorks.Data.BalancedParens.RangeMinMax2+ HaskellWorks.Data.BalancedParens.Simple+ other-modules: Paths_hw_balancedparens+ autogen-modules: Paths_hw_balancedparens+ hs-source-dirs: src test-suite hw-balancedparens-test- type: exitcode-stdio-1.0- main-is: Spec.hs- hs-source-dirs:- test- ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N- build-depends:- base >=4 && <5- , hw-bits >=0.4.0.0 && < 0.8- , hw-prim >=0.4.0.0 && < 0.7- , vector >= 0.12 && < 0.13- , hspec >= 2.2 && < 2.6- , hw-balancedparens- , hw-rankselect-base >=0.2.0.0 && < 0.4- , QuickCheck >= 2.10 && < 2.12+ import: base, config+ , QuickCheck+ , hspec+ , hw-bits+ , hw-prim+ , hw-rankselect-base+ , vector+ type: exitcode-stdio-1.0+ main-is: Spec.hs other-modules: HaskellWorks.Data.BalancedParens.Internal.BroadwordSpec HaskellWorks.Data.BalancedParens.RangeMinMax2Spec HaskellWorks.Data.BalancedParens.RangeMinMaxSpec HaskellWorks.Data.BalancedParens.SimpleSpec- default-language: Haskell2010+ Paths_hw_balancedparens+ hs-source-dirs: test+ ghc-options: -threaded -rtsopts -with-rtsopts=-N+ build-depends: hw-balancedparens+ autogen-modules: Paths_hw_balancedparens+ build-tool-depends: hspec-discover:hspec-discover benchmark bench- type: exitcode-stdio-1.0- main-is: Main.hs- hs-source-dirs:- bench- ghc-options: -Wall -O2 -msse4.2- build-depends:- base >=4 && <5- , hw-bits >=0.4.0.0 && < 0.8- , hw-prim >=0.4.0.0 && < 0.7- , vector >= 0.12 && < 0.13- , criterion >= 1.2 && < 1.5- , hw-balancedparens- default-language: Haskell2010+ import: base, config+ , criterion+ , hw-bits+ , hw-prim+ , vector+ type: exitcode-stdio-1.0+ main-is: Main.hs+ other-modules: Paths_hw_balancedparens+ autogen-modules: Paths_hw_balancedparens+ hs-source-dirs: bench+ build-depends: hw-balancedparens
src/HaskellWorks/Data/BalancedParens/RangeMinMax.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE InstanceSigs #-}@@ -9,7 +11,9 @@ , mkRangeMinMax ) where +import Control.DeepSeq import Data.Int+import GHC.Generics import HaskellWorks.Data.AtIndex import HaskellWorks.Data.BalancedParens.BalancedParens import HaskellWorks.Data.BalancedParens.CloseAt@@ -44,7 +48,7 @@ , rangeMinMaxL2Min :: !(DVS.Vector Int16) , rangeMinMaxL2Max :: !(DVS.Vector Int16) , rangeMinMaxL2Excess :: !(DVS.Vector Int16)- }+ } deriving (NFData, Generic) factorL0 :: Integral a => a factorL0 = 1
src/HaskellWorks/Data/BalancedParens/RangeMinMax2.hs view
@@ -1,8 +1,10 @@-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}-{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE TypeFamilies #-} module HaskellWorks.Data.BalancedParens.RangeMinMax2 ( RangeMinMax2(..)@@ -11,7 +13,9 @@ , genMax ) where +import Control.DeepSeq import Data.Int+import GHC.Generics import HaskellWorks.Data.AtIndex import HaskellWorks.Data.BalancedParens.BalancedParens import HaskellWorks.Data.BalancedParens.CloseAt@@ -20,8 +24,8 @@ import HaskellWorks.Data.BalancedParens.FindCloseN import HaskellWorks.Data.BalancedParens.FindOpen import HaskellWorks.Data.BalancedParens.FindOpenN-import HaskellWorks.Data.BalancedParens.OpenAt import HaskellWorks.Data.BalancedParens.NewCloseAt+import HaskellWorks.Data.BalancedParens.OpenAt import HaskellWorks.Data.Bits.AllExcess.AllExcess1 import HaskellWorks.Data.Bits.BitLength import HaskellWorks.Data.Bits.BitWise@@ -31,7 +35,7 @@ import HaskellWorks.Data.RankSelect.Base.Rank0 import HaskellWorks.Data.RankSelect.Base.Rank1 import HaskellWorks.Data.Vector.AsVector64-import Prelude hiding (length)+import Prelude hiding (length) import qualified Data.Vector as DV import qualified Data.Vector.Storable as DVS@@ -53,7 +57,7 @@ , rangeMinMax2L4Min :: !(DVS.Vector Int16) , rangeMinMax2L4Max :: !(DVS.Vector Int16) , rangeMinMax2L4Excess :: !(DVS.Vector Int16)- }+ } deriving (NFData, Generic) factorL0 :: Integral a => a factorL0 = 1