diff --git a/hw-simd.cabal b/hw-simd.cabal
--- a/hw-simd.cabal
+++ b/hw-simd.cabal
@@ -1,9 +1,6 @@
--- 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-simd
-version:        0.1.1.3
+version:        0.1.1.4
 synopsis:       SIMD library
 description:    Please see the README on Github at <https://github.com/haskell-works/hw-simd#readme>
 category:       Data, Bit, SIMD
@@ -12,17 +9,15 @@
 author:         John Ky
 maintainer:     newhoggy@gmail.com
 copyright:      2018 John Ky
-license:        BSD3
+license:        BSD-3-Clause
 license-file:   LICENSE
-tested-with:    GHC == 8.4.3, GHC == 8.2.2, GHC == 8.0.2, GHC == 7.10.3
+tested-with:    GHC == 8.6.4, GHC == 8.4.4, GHC == 8.2.2, GHC == 8.0.2
 build-type:     Simple
-cabal-version:  >= 1.10
-
 extra-source-files:
+    README.md
+    ChangeLog.md
     cbits/simd.h
     cbits/simd_debug.h
-    ChangeLog.md
-    README.md
 
 source-repository head
   type: git
@@ -43,27 +38,67 @@
   manual: False
   default: True
 
+common base                 { build-depends: base                 >= 4.7        && < 5      }
+common bits-extra           { build-depends: bits-extra           >= 0.0.1.2    && < 0.1    }
+common bytestring           { build-depends: bytestring           >= 0.10       && < 0.11   }
+common cassava              { build-depends: cassava              >= 0.5.1.0    && < 0.6    }
+common containers           { build-depends: containers                                     }
+common criterion            { build-depends: criterion            >= 1.4.1.0    && < 1.6    }
+common deepseq              { build-depends: deepseq              >= 1.4        && < 1.5    }
+common directory            { build-depends: directory            >= 1.2.2      && < 1.4    }
+common hedgehog             { build-depends: hedgehog             >= 0.5        && < 0.7    }
+common hspec                { build-depends: hspec                >= 2.4        && < 3      }
+common hw-bits              { build-depends: hw-bits              >= 0.7.0.2    && < 0.8    }
+common hw-hedgehog          { build-depends: hw-hedgehog          >= 0.1.0.1    && < 0.2    }
+common hw-hspec-hedgehog    { build-depends: hw-hspec-hedgehog    >= 0.1.0.4    && < 0.2    }
+common hw-prim              { build-depends: hw-prim              >= 0.6.2.12   && < 0.7    }
+common hw-rankselect        { build-depends: hw-rankselect        >= 0.13       && < 0.14   }
+common hw-rankselect-base   { build-depends: hw-rankselect-base   >= 0.3.2.0    && < 0.4    }
+common lens                 { build-depends: lens                                           }
+common mmap                 { build-depends: mmap                 >= 0.5.9      && < 0.6    }
+common text                 { build-depends: text                 >= 1.2.2      && < 2.0    }
+common vector               { build-depends: vector               >= 0.12.0.1   && < 0.13   }
+
+common semigroups   { if (!impl(ghc >= 8.0.1)) { build-depends: semigroups   >=  0.8.4   && < 0.19 } }
+common transformers { if (!impl(ghc >= 8.0.1)) { build-depends: transformers >=  0.4     && < 0.6  } }
+
+common common
+  default-language: Haskell2010
+
 library
-  hs-source-dirs:
-      src
-  ghc-options: -O2 -Wall
-  include-dirs:
-      cbits
+  import:   base, common
+          , bits-extra
+          , bytestring
+          , deepseq
+          , hw-bits
+          , hw-prim
+          , hw-rankselect
+          , hw-rankselect-base
+          , semigroups
+          , transformers
+          , vector
+  exposed-modules:
+      HaskellWorks.Data.Simd.Capabilities
+      HaskellWorks.Data.Simd.ChunkString
+      HaskellWorks.Data.Simd.Comparison
+      HaskellWorks.Data.Simd.Comparison.Avx2
+      HaskellWorks.Data.Simd.Comparison.Stock
+      HaskellWorks.Data.Simd.Internal.Bits
+      HaskellWorks.Data.Simd.Internal.Broadword
+      HaskellWorks.Data.Simd.Internal.ChunkString
+      HaskellWorks.Data.Simd.Internal.Foreign
+      HaskellWorks.Data.Simd.Internal.Marshal
+      HaskellWorks.Data.Simd.Logical
+      HaskellWorks.Data.Simd.Logical.Avx2
+      HaskellWorks.Data.Simd.Logical.Stock
+  other-modules:    Paths_hw_simd
+  autogen-modules:  Paths_hw_simd
+  hs-source-dirs:   src
+  ghc-options:      -O2 -Wall
+  include-dirs:     cbits
   c-sources:
       cbits/simd_avx2.c
       cbits/simd_sse2.c
-  build-depends:
-      base                  >= 4.7      && < 5
-    , bits-extra            >= 0.0.1.2  && < 0.1
-    , bytestring            >= 0.10     && < 0.11
-    , deepseq               >= 1.4      && < 1.5
-    , hw-bits               >= 0.7.0.2  && < 0.8
-    , hw-rankselect         >= 0.12.0.2 && < 0.13
-    , hw-rankselect-base    >= 0.3.2.0  && < 0.4
-    , hw-prim               >= 0.6.2.12 && < 0.7
-    , vector                >= 0.12.0.1 && < 0.13
-  build-tools:
-      c2hs
   if flag(sse42)
     ghc-options: -msse4.2
     cc-options: -msse4.2
@@ -80,50 +115,39 @@
     ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   if (!impl(ghc >=8.0.1))
     build-depends:
-        transformers          >= 0.4        && < 0.6
-      , semigroups            >= 0.8.4      && < 0.19
-  exposed-modules:
-      HaskellWorks.Data.Simd.Capabilities
-      HaskellWorks.Data.Simd.ChunkString
-      HaskellWorks.Data.Simd.Comparison
-      HaskellWorks.Data.Simd.Comparison.Avx2
-      HaskellWorks.Data.Simd.Comparison.Stock
-      HaskellWorks.Data.Simd.Internal.Bits
-      HaskellWorks.Data.Simd.Internal.Broadword
-      HaskellWorks.Data.Simd.Internal.ChunkString
-      HaskellWorks.Data.Simd.Internal.Foreign
-      HaskellWorks.Data.Simd.Internal.Marshal
-      HaskellWorks.Data.Simd.Logical
-      HaskellWorks.Data.Simd.Logical.Avx2
-      HaskellWorks.Data.Simd.Logical.Stock
-  other-modules:
-      Paths_hw_simd
-  default-language: Haskell2010
+        semigroups >=0.8.4 && <0.19
+      , transformers >=0.4 && <0.6
+  build-tools:
+      c2hs
 
 test-suite hw-simd-test
-  type: exitcode-stdio-1.0
-  main-is: Spec.hs
-  hs-source-dirs:
-      test
-  ghc-options: -O2 -Wall -threaded -rtsopts -with-rtsopts=-N
-  build-depends:
-      base                  >= 4.7      && < 5
-    , bits-extra            >= 0.0.1.2  && < 0.1
-    , bytestring            >= 0.10     && < 0.11
-    , deepseq               >= 1.4      && < 1.5
-    , hw-bits               >= 0.7.0.2  && < 0.8
-    , hw-rankselect         >= 0.12.0.2 && < 0.13
-    , hw-rankselect-base    >= 0.3.2.0  && < 0.4
-    , hw-prim               >= 0.6.2.12 && < 0.7
-    , vector                >= 0.12.0.1 && < 0.13
-    , directory               >= 1.2.2      && < 1.4
-    , lens
-    , hw-simd
-    , hedgehog                >= 0.5        && < 0.7
-    , hspec                   >= 2.4        && < 3
-    , hw-hspec-hedgehog       >= 0.1.0.4    && < 0.2
-    , hw-hedgehog             >= 0.1.0.1    && < 0.2
-    , text                    >= 1.2.2      && < 2.0
+  import:   base, common
+          , bits-extra
+          , bytestring
+          , deepseq
+          , directory
+          , hedgehog
+          , hspec
+          , hw-bits
+          , hw-hedgehog
+          , hw-hspec-hedgehog
+          , hw-prim
+          , hw-rankselect
+          , hw-rankselect-base
+          , lens
+          , text
+          , vector
+  type:             exitcode-stdio-1.0
+  main-is:          Spec.hs
+  build-depends:    hw-simd
+  other-modules:
+      HaskellWorks.Data.Simd.ComparisonSpec
+      HaskellWorks.Data.Simd.Internal.BroadwordSpec
+      HaskellWorks.Data.Simd.LogicalSpec
+      Paths_hw_simd
+  autogen-modules:  Paths_hw_simd
+  hs-source-dirs:   test
+  ghc-options:      -O2 -Wall -threaded -rtsopts -with-rtsopts=-N
   if flag(sse42)
     ghc-options: -msse4.2
     cc-options: -msse4.2
@@ -138,38 +162,32 @@
     cpp-options: -DBMI2_ENABLED -DAVX2_ENABLED
   if (impl(ghc >=8.0.1))
     ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
-  if (!impl(ghc >=8.0.1))
-    build-depends:
-        transformers          >= 0.4        && < 0.6
-      , semigroups            >= 0.8.4      && < 0.19
-  other-modules:
-      HaskellWorks.Data.Simd.ComparisonSpec
-      HaskellWorks.Data.Simd.Internal.BroadwordSpec
-      HaskellWorks.Data.Simd.LogicalSpec
-  default-language: Haskell2010
+  build-tool-depends: hspec-discover:hspec-discover
 
 benchmark bench
-  type: exitcode-stdio-1.0
-  main-is: Main.hs
-  hs-source-dirs:
-      bench
-  ghc-options: -O2 -Wall -msse4.2
-  build-depends:
-      base                  >= 4.7      && < 5
-    , bits-extra            >= 0.0.1.2  && < 0.1
-    , bytestring            >= 0.10     && < 0.11
-    , deepseq               >= 1.4      && < 1.5
-    , hw-bits               >= 0.7.0.2  && < 0.8
-    , hw-rankselect         >= 0.12.0.2 && < 0.13
-    , hw-rankselect-base    >= 0.3.2.0  && < 0.4
-    , hw-prim               >= 0.6.2.12 && < 0.7
-    , vector                >= 0.12.0.1 && < 0.13
-    , cassava               >= 0.5.1.0    && < 0.6
-    , containers
-    , criterion             >= 1.4.1.0    && < 1.6
-    , directory             >= 1.3.1.5    && < 1.4
-    , hw-simd
-    , mmap                  >= 0.5.9      && < 0.6
+  import:   base, common
+          , bits-extra
+          , bytestring
+          , cassava
+          , containers
+          , criterion
+          , deepseq
+          , directory
+          , hw-bits
+          , hw-prim
+          , hw-rankselect
+          , hw-rankselect-base
+          , mmap
+          , semigroups
+          , transformers
+          , vector
+  type:             exitcode-stdio-1.0
+  main-is:          Main.hs
+  other-modules:    Paths_hw_simd
+  autogen-modules:  Paths_hw_simd
+  hs-source-dirs:   bench
+  ghc-options:      -O2 -Wall -msse4.2
+  build-depends:    hw-simd
   if flag(sse42)
     ghc-options: -msse4.2
     cc-options: -msse4.2
@@ -184,8 +202,3 @@
     cpp-options: -DBMI2_ENABLED -DAVX2_ENABLED
   if (impl(ghc >=8.0.1))
     ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
-  if (!impl(ghc >=8.0.1))
-    build-depends:
-        transformers          >= 0.4        && < 0.6
-      , semigroups            >= 0.8.4      && < 0.19
-  default-language: Haskell2010
