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.33
+version:        0.6.2.34
 synopsis:       Primitive functions and data types
 description:    Primitive functions and data types.
 category:       Data
@@ -106,6 +106,7 @@
     HaskellWorks.Data.Vector.Storable
     HaskellWorks.Data.Vector.StorableVectorLike
     HaskellWorks.Data.Word
+    HaskellWorks.Foreign
   other-modules:      Paths_hw_prim
   autogen-modules:    Paths_hw_prim
   hs-source-dirs:     src
diff --git a/src/HaskellWorks/Foreign.hs b/src/HaskellWorks/Foreign.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Foreign.hs
@@ -0,0 +1,16 @@
+module HaskellWorks.Foreign
+  ( mallocForeignPtrBytesWithAlignedPtr
+  ) where
+
+import Foreign.ForeignPtr (ForeignPtr)
+import Foreign.Ptr        (Ptr, alignPtr)
+import Foreign.Storable   (Storable)
+
+import qualified Foreign.ForeignPtr        as F
+import qualified Foreign.ForeignPtr.Unsafe 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)
