diff --git a/GHC/Exts/Heap/InfoTable/Types.hsc b/GHC/Exts/Heap/InfoTable/Types.hsc
--- a/GHC/Exts/Heap/InfoTable/Types.hsc
+++ b/GHC/Exts/Heap/InfoTable/Types.hsc
@@ -1,8 +1,11 @@
 {-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+
 module GHC.Exts.Heap.InfoTable.Types
     ( StgInfoTable(..)
     , EntryFunPtr
-    , HalfWord
+    , HalfWord(..)
     , ItblCodes
     ) where
 
@@ -18,12 +21,15 @@
 #include "ghcautoconf.h"
 -- Ultra-minimalist version specially for constructors
 #if SIZEOF_VOID_P == 8
-type HalfWord = Word32
+type HalfWord' = Word32
 #elif SIZEOF_VOID_P == 4
-type HalfWord = Word16
+type HalfWord' = Word16
 #else
 #error Unknown SIZEOF_VOID_P
 #endif
+
+newtype HalfWord = HalfWord HalfWord'
+    deriving newtype (Enum, Eq, Integral, Num, Ord, Real, Show, Storable)
 
 type EntryFunPtr = FunPtr (Ptr () -> IO (Ptr ()))
 
diff --git a/ghc-heap.cabal b/ghc-heap.cabal
--- a/ghc-heap.cabal
+++ b/ghc-heap.cabal
@@ -1,6 +1,6 @@
 cabal-version:  3.0
 name:           ghc-heap
-version:        9.12.1
+version:        9.12.3
 license:        BSD-3-Clause
 license-file:   LICENSE
 maintainer:     libraries@haskell.org
@@ -28,7 +28,7 @@
                   , containers       >= 0.6.2.1 && < 0.8
 
   if impl(ghc >= 9.9)
-    build-depends:  ghc-internal     >= 9.900 && < 9.1201.99999
+    build-depends:  ghc-internal     >= 9.900 && < 9.1203.99999
 
   ghc-options:      -Wall
   if !os(ghcjs)
