diff --git a/hw-prim.cabal b/hw-prim.cabal
--- a/hw-prim.cabal
+++ b/hw-prim.cabal
@@ -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-prim
-version:        0.6.2.22
+version:        0.6.2.23
 synopsis:       Primitive functions and data types
 description:    Primitive functions and data types.
 category:       Data
@@ -13,12 +11,10 @@
 author:         John Ky
 maintainer:     newhoggy@gmail.com
 copyright:      2016-2018 John Ky
-license:        BSD3
+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.3, GHC == 8.4.4, GHC == 8.2.2, GHC == 8.0.2
 build-type:     Simple
-cabal-version:  >= 1.10
-
 extra-source-files:
     README.md
 
@@ -31,20 +27,35 @@
   manual: False
   default: False
 
-library
-  hs-source-dirs:
-      src
-  other-extensions: AllowAmbiguousTypes
-  ghc-options: -Wall -O2 -msse4.2
-  build-depends:
-      base            >= 4.8        && < 5
-    , bytestring      >= 0.9        && < 0.11
-    , mmap            >= 0.5        && < 0.6
-    , vector          >= 0.12       && < 0.13
-    , semigroups      >= 0.8.4      && < 0.19
-    , transformers    >= 0.4        && < 0.6
+common base                 { build-depends: base                 >= 4          && < 5      }
+
+common QuickCheck           { build-depends: QuickCheck           >= 2.10       && < 2.12   }
+common bytestring           { build-depends: bytestring           >= 0.9        && < 0.11   }
+common criterion            { build-depends: criterion            >= 1.2        && < 1.6    }
+common directory            { build-depends: directory            >= 1.2        && < 1.4    }
+common exceptions           { build-depends: exceptions           >= 0.8        && < 0.11   }
+common hedgehog             { build-depends: hedgehog             >= 0.5        && < 0.7    }
+common hspec                { build-depends: hspec                >= 2.4        && < 2.6    }
+common hw-hspec-hedgehog    { build-depends: hw-hspec-hedgehog    >= 0.1        && < 0.2    }
+common mmap                 { build-depends: mmap                 >= 0.5        && < 0.6    }
+common semigroups           { build-depends: semigroups           >= 0.8.4      && < 0.19   }
+common transformers         { build-depends: transformers         >= 0.4        && < 0.6    }
+common vector               { build-depends: vector               >= 0.12       && < 0.13   }
+
+common common
+  default-language:   Haskell2010
+  ghc-options:        -Wall -O2 -msse4.2
   if flag(bounds-checking-enabled)
     cpp-options: -DBOUNDS_CHECKING_ENABLED
+
+library
+  import:   base
+          , common
+          , bytestring
+          , mmap
+          , semigroups
+          , transformers
+          , vector
   exposed-modules:
       HaskellWorks.Data.AtIndex
       HaskellWorks.Data.ByteString
@@ -82,33 +93,27 @@
       HaskellWorks.Data.Vector.BoxedVectorLike
       HaskellWorks.Data.Vector.Storable
       HaskellWorks.Data.Vector.StorableVectorLike
-  other-modules:
-      Paths_hw_prim
-  default-language: Haskell2010
+  other-modules:      Paths_hw_prim
+  autogen-modules:    Paths_hw_prim
+  hs-source-dirs:     src
+  other-extensions:   AllowAmbiguousTypes
 
 test-suite hw-prim-test
+  import:   base
+          , common
+          , QuickCheck
+          , bytestring
+          , directory
+          , exceptions
+          , hedgehog
+          , hspec
+          , hw-hspec-hedgehog
+          , mmap
+          , semigroups
+          , transformers
+          , vector
   type: exitcode-stdio-1.0
   main-is: Spec.hs
-  hs-source-dirs:
-      test
-  other-extensions: AllowAmbiguousTypes
-  ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
-  build-depends:
-      base            >= 4.8        && < 5
-    , bytestring      >= 0.9        && < 0.11
-    , mmap            >= 0.5        && < 0.6
-    , vector          >= 0.12       && < 0.13
-    , semigroups      >= 0.8.4      && < 0.19
-    , transformers    >= 0.4        && < 0.6
-    , QuickCheck          >= 2.10       && < 2.12
-    , directory           >= 1.2        && < 1.4
-    , exceptions          >= 0.8        && < 0.11
-    , hedgehog            >= 0.5        && < 0.7
-    , hspec               >= 2.4        && < 2.6
-    , hw-hspec-hedgehog   >= 0.1        && < 0.2
-    , hw-prim
-  if flag(bounds-checking-enabled)
-    cpp-options: -DBOUNDS_CHECKING_ENABLED
   other-modules:
       HaskellWorks.Data.ByteStringSpec
       HaskellWorks.Data.FromByteStringSpec
@@ -119,25 +124,27 @@
       HaskellWorks.Data.Vector.AsVector8nsSpec
       HaskellWorks.Data.Vector.AsVector8sSpec
       HaskellWorks.Data.Vector.StorableSpec
-  default-language: Haskell2010
+      Paths_hw_prim
+  autogen-modules:    Paths_hw_prim
+  build-depends:      hw-prim
+  hs-source-dirs:     test
+  other-extensions:   AllowAmbiguousTypes
+  ghc-options:        -threaded -rtsopts -with-rtsopts=-N
+  build-tool-depends: hspec-discover:hspec-discover
 
 benchmark bench
-  type: exitcode-stdio-1.0
-  main-is: Main.hs
-  hs-source-dirs:
-      bench
-  other-extensions: AllowAmbiguousTypes
-  ghc-options: -Wall -O2 -msse4.2
-  build-depends:
-      base            >= 4.8        && < 5
-    , bytestring      >= 0.9        && < 0.11
-    , mmap            >= 0.5        && < 0.6
-    , vector          >= 0.12       && < 0.13
-    , semigroups      >= 0.8.4      && < 0.19
-    , transformers    >= 0.4        && < 0.6
-    , criterion     >= 1.2      && < 1.6
-    , hw-prim
-    , mmap          >= 0.5      && < 0.6
-  if flag(bounds-checking-enabled)
-    cpp-options: -DBOUNDS_CHECKING_ENABLED
-  default-language: Haskell2010
+  import:   base
+          , common
+          , bytestring
+          , criterion
+          , mmap
+          , semigroups
+          , transformers
+          , vector
+  type:               exitcode-stdio-1.0
+  main-is:            Main.hs
+  other-modules:      Paths_hw_prim
+  hs-source-dirs:     bench
+  build-depends:      hw-prim
+  other-extensions:   AllowAmbiguousTypes
+  autogen-modules:    Paths_hw_prim
