diff --git a/library/Ptr/Poke.hs b/library/Ptr/Poke.hs
--- a/library/Ptr/Poke.hs
+++ b/library/Ptr/Poke.hs
@@ -3,6 +3,7 @@
 
 import Ptr.Prelude
 import qualified Ptr.PokeAndPeek as B
+import qualified Data.Vector as F
 
 
 {-|
@@ -84,3 +85,16 @@
 asciiHexDigit :: Poke Word8
 asciiHexDigit =
   contramap (\ n -> if n < 10 then 48 + n else 55 + n) word8
+
+{-# INLINE vector #-}
+vector :: Int -> Poke element -> Poke (F.Vector element)
+vector vectorSize (Poke elementByteSize elementIO) =
+  Poke vectorByteSize vectorIO
+  where
+    vectorByteSize =
+      vectorSize * elementByteSize
+    vectorIO =
+      F.foldM'_ step
+      where
+        step ptr element =
+          elementIO ptr element $> plusPtr ptr elementByteSize
diff --git a/library/Ptr/Poking.hs b/library/Ptr/Poking.hs
--- a/library/Ptr/Poking.hs
+++ b/library/Ptr/Poking.hs
@@ -7,6 +7,7 @@
 import qualified Ptr.PokeAndPeek as D
 import qualified Ptr.PokeIO as E
 import qualified Data.ByteString.Internal as B
+import qualified Data.Vector as F
 
 
 {-|
@@ -20,7 +21,7 @@
   * Amount of bytes the encoded data will occupy.
   * Exception-free action, which populates the pointer to the encoded data.
   -}
-  Poking !Int !(Ptr Word8 -> IO ())
+  Poking !Int (Ptr Word8 -> IO ())
 
 instance Semigroup Poking where
   {-|
@@ -169,3 +170,23 @@
       \ case
         head : tail -> loop (state <> word8 1 <> element head) tail
         _ -> state <> word8 0
+
+{-# INLINABLE vector #-}
+vector :: (element -> Poking) -> F.Vector element -> Poking
+vector element vectorValue =
+  Poking byteSize io
+  where
+    byteSize =
+      foldl' step 0 vectorValue
+      where
+        step !byteSize elementValue =
+          case element elementValue of
+            Poking elementByteSize _ -> byteSize + elementByteSize
+    io ptr =
+      F.foldM'_ step ptr vectorValue
+      where
+        step ptr elementValue =
+          case element elementValue of
+            Poking elementByteSize elementIO -> do
+              elementIO ptr
+              return (plusPtr ptr elementByteSize)
diff --git a/ptr.cabal b/ptr.cabal
--- a/ptr.cabal
+++ b/ptr.cabal
@@ -1,7 +1,7 @@
 name:
   ptr
 version:
-  0.16.4
+  0.16.5
 category:
   Ptr, Data
 synopsis:
@@ -58,6 +58,7 @@
     text == 1.*,
     bytestring >= 0.10 && < 0.11,
     time >= 1 && < 2,
+    vector >= 0.12 && < 0.13,
     -- control:
     semigroups >= 0.18 && < 0.20,
     profunctors >= 5.1 && < 6,
