diff --git a/hw-prim.cabal b/hw-prim.cabal
--- a/hw-prim.cabal
+++ b/hw-prim.cabal
@@ -1,7 +1,7 @@
 cabal-version:  2.2
 
 name:           hw-prim
-version:        0.6.2.34
+version:        0.6.2.35
 synopsis:       Primitive functions and data types
 description:    Primitive functions and data types.
 category:       Data
@@ -13,7 +13,7 @@
 copyright:      2016-2019 John Ky
 license:        BSD-3-Clause
 license-file:   LICENSE
-tested-with:    GHC == 8.6.5, GHC == 8.4.4, GHC == 8.2.2
+tested-with:    GHC == 8.8.1, GHC == 8.6.5, GHC == 8.4.4, GHC == 8.2.2
 build-type:     Simple
 extra-source-files:
     README.md
diff --git a/src/HaskellWorks/Foreign.hs b/src/HaskellWorks/Foreign.hs
--- a/src/HaskellWorks/Foreign.hs
+++ b/src/HaskellWorks/Foreign.hs
@@ -1,5 +1,6 @@
 module HaskellWorks.Foreign
   ( mallocForeignPtrBytesWithAlignedPtr
+  , mallocForeignPtrBytesWithAlignedCastPtr
   ) where
 
 import Foreign.ForeignPtr (ForeignPtr)
@@ -8,9 +9,16 @@
 
 import qualified Foreign.ForeignPtr        as F
 import qualified Foreign.ForeignPtr.Unsafe as F
+import qualified Foreign.Ptr               as F
 
 mallocForeignPtrBytesWithAlignedPtr :: Storable a => Int -> Int -> IO (ForeignPtr a, Ptr a)
 mallocForeignPtrBytesWithAlignedPtr alignment n = do
   fptr <- F.mallocForeignPtrBytes (n + alignment)
   let alignedPtr = alignPtr (F.unsafeForeignPtrToPtr fptr) alignment
   return (fptr, alignedPtr)
+
+mallocForeignPtrBytesWithAlignedCastPtr :: Storable a => Int -> Int -> IO (ForeignPtr a, Ptr b)
+mallocForeignPtrBytesWithAlignedCastPtr alignment n = do
+  fptr <- F.mallocForeignPtrBytes (n + alignment)
+  let alignedPtr = alignPtr (F.unsafeForeignPtrToPtr fptr) alignment
+  return (fptr, F.castPtr alignedPtr)
