diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
 # Hashtables changelog
 
+## 1.2.3.3
+
+Fix build with certain versions of `primitive` (thx again Carter)
+
 ## 1.2.3.2
 
   - CPP fix for breakage caused by primitive 0.7 (thx Carter)
diff --git a/hashtables.cabal b/hashtables.cabal
--- a/hashtables.cabal
+++ b/hashtables.cabal
@@ -1,16 +1,20 @@
+Cabal-Version: 2.2
 Name:                hashtables
-Version:             1.2.3.2
+Version:             1.2.3.3
 Synopsis:            Mutable hash tables in the ST monad
 Homepage:            http://github.com/gregorycollins/hashtables
-License:             BSD3
+License:             BSD-3-Clause
 License-file:        LICENSE
 Author:              Gregory Collins
 Maintainer:          greg@gregorycollins.net, mgoremeier@gmail.com
 Copyright:           (c) 2011-2014, Google, Inc., 2016-present contributors
 Category:            Data
 Build-type:          Simple
-Cabal-version:       >= 1.8
 
+
+tested-with: GHC==8.8.1,GHC==8.6.5, GHC==8.4.4, GHC==8.2.2, GHC==8.0.2, GHC==7.10.3, GHC==7.8.4
+
+
 Description:
   This package provides a couple of different implementations of mutable hash
   tables in the ST monad, as well as a typeclass abstracting their common
@@ -134,7 +138,13 @@
 Flag debug
   Description: if on, spew debugging output to stdout
   Default: False
+  Manual: True
 
+Flag detailed-profiling
+  Description: add detailed profiling information to profiled build-depends
+  Default: False
+  Manual: True
+
 Flag sse42
   Description: if on, use SSE 4.2 extensions to search cache lines very
                efficiently. The portable flag forces this off.
@@ -146,6 +156,7 @@
 
 
 Library
+  Default-Language: Haskell2010
   hs-source-dirs:    src
 
   if flag(sse42) && !flag(portable)
@@ -191,10 +202,18 @@
   if flag(bounds-checking)
     cpp-options: -DBOUNDS_CHECKING
 
-  ghc-prof-options: -auto-all
+  if flag(detailed-profiling)
+    if impl(ghc >= 7.4.1)
+     ghc-prof-options: -fprof-auto
+    if impl(ghc < 7.4.1)
+     ghc-prof-options: -auto-all
 
   if impl(ghc >= 6.12.0)
     ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
                  -fno-warn-unused-do-bind
   else
     ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
+
+source-repository head
+  type:     git
+  location: https://github.com/gregorycollins/hashtables.git
diff --git a/src/Data/HashTable/Internal/IntArray.hs b/src/Data/HashTable/Internal/IntArray.hs
--- a/src/Data/HashTable/Internal/IntArray.hs
+++ b/src/Data/HashTable/Internal/IntArray.hs
@@ -20,7 +20,9 @@
 import           Control.Monad.ST
 import           Data.Bits
 import qualified Data.Primitive.ByteArray as A
+#if !MIN_VERSION_primitive(0,7,0)
 import           Data.Primitive.Types     (Addr (..))
+#endif
 import           GHC.Exts
 import           GHC.Word
 import           Prelude                  hiding (length)
diff --git a/src/Data/HashTable/Internal/Linear/Bucket.hs b/src/Data/HashTable/Internal/Linear/Bucket.hs
--- a/src/Data/HashTable/Internal/Linear/Bucket.hs
+++ b/src/Data/HashTable/Internal/Linear/Bucket.hs
@@ -350,7 +350,7 @@
                 return (hw', mbk, a)
     | otherwise = mutate' $ fromKey bucketKey
   where
-    mutate' (Bucket sz hwRef keys values) = do
+    mutate' (Bucket _sz hwRef keys values) = do
         hw <- readSTRef hwRef
         pos <- findPosition hw (hw-1)
         mv <- do
@@ -363,10 +363,10 @@
             (Nothing, (Just v', a)) -> do
                 (!hw', mbk) <- snoc bucketKey k v'
                 return (hw', mbk, a)
-            (Just v, (Just v', a)) -> do
+            (Just _v, (Just v', a)) -> do
                 writeArray values pos v'
                 return (hw, Nothing, a)
-            (Just v, (Nothing, a)) -> do
+            (Just _v, (Nothing, a)) -> do
                 move (hw-1) pos keys
                 move (hw-1) pos values
                 let !hw' = hw-1
diff --git a/src/Data/HashTable/ST/Cuckoo.hs b/src/Data/HashTable/ST/Cuckoo.hs
--- a/src/Data/HashTable/ST/Cuckoo.hs
+++ b/src/Data/HashTable/ST/Cuckoo.hs
@@ -432,14 +432,14 @@
         -> (Maybe v -> ST s (Maybe v, a))
         -> ST s (HashTable_ s k v, a)
 mutate' ht@(HashTable sz _ hashes keys values _) !k !f = do
-    !(maybeVal, idx, hashCode) <- lookupSlot
+    !(maybeVal, idx, _hashCode) <- lookupSlot
     !fRes <- f maybeVal
     case (maybeVal, fRes) of
         (Nothing, (Nothing, a)) -> return (ht, a)
-        (Just v, (Just v', a)) -> do
+        (Just _v, (Just v', a)) -> do
             writeArray values idx v'
             return (ht, a)
-        (Just v, (Nothing, a)) -> do
+        (Just _v, (Nothing, a)) -> do
             deleteFromSlot ht idx
             return (ht, a)
         (Nothing, (Just v', a)) -> do
@@ -486,7 +486,7 @@
               else do
                 result <- cuckooOrFail ht h1 h2 b1 b2 k v
                 maybe (return ht)
-                      (\(k', v') -> do
+                      (\(_k', _v') -> do
                           newHt <- grow ht k v
                           return newHt)
                       result
@@ -498,7 +498,7 @@
                   HashTable_ s k v
                -> Int
                -> ST s ()
-deleteFromSlot ht@(HashTable _ _ hashes keys values _) idx = do
+deleteFromSlot _ht@(HashTable _ _ hashes keys values _) idx = do
     U.writeArray hashes idx emptyMarker
     writeArray keys idx undefined
     writeArray values idx undefined
@@ -513,7 +513,7 @@
                -> k
                -> v
                -> ST s ()
-insertIntoSlot ht@(HashTable _ _ hashes keys values _) idx he k v = do
+insertIntoSlot _ht@(HashTable _ _ hashes keys values _) idx he k v = do
     U.writeArray hashes idx he
     writeArray keys idx k
     writeArray values idx v
