diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -10,60 +10,63 @@
   defaultMain
     [ bgroup
         "bWord32"
-        [ bench "4" $
-            nf
+        [ bench "4"
+            $ nf
               ( \(a, b, c, d) ->
-                  Write.writeToByteString $
-                    Write.bWord32 a <> Write.bWord32 b <> Write.bWord32 c <> Write.bWord32 d
+                  Write.writeToByteString
+                    $ Write.bWord32 a
+                    <> Write.bWord32 b
+                    <> Write.bWord32 c
+                    <> Write.bWord32 d
               )
               (1, 2, 3, 4)
         ],
-      bgroup "textUtf8" $
-        let latinSampleBySize size =
-              enumFromTo 'a' 'z'
-                & replicate size
-                & concat
-                & fromString
-            greekSampleBySize size =
-              enumFromTo 'Α' 'Ω'
-                & replicate size
-                & concat
-                & fromString
-            !latinSample1 = latinSampleBySize 1
-            !latinSample10 = latinSampleBySize 10
-            !latinSample100 = latinSampleBySize 100
-            !greekSample1 = greekSampleBySize 1
-            !greekSample10 = greekSampleBySize 10
-            !greekSample100 = greekSampleBySize 100
-         in [ bgroup
-                "ptr-poker"
-                [ bgroup
-                    "latin"
-                    [ bench "1" (nf (Write.writeToByteString . Write.textUtf8) latinSample1),
-                      bench "10" (nf (Write.writeToByteString . Write.textUtf8) latinSample10),
-                      bench "100" (nf (Write.writeToByteString . Write.textUtf8) latinSample100)
-                    ],
-                  bgroup
-                    "greek"
-                    [ bench "1" (nf (Write.writeToByteString . Write.textUtf8) greekSample1),
-                      bench "10" (nf (Write.writeToByteString . Write.textUtf8) greekSample10),
-                      bench "100" (nf (Write.writeToByteString . Write.textUtf8) greekSample100)
-                    ]
-                ],
-              bgroup
-                "text"
-                [ bgroup
-                    "latin"
-                    [ bench "1" (nf Text.encodeUtf8 latinSample1),
-                      bench "10" (nf Text.encodeUtf8 latinSample10),
-                      bench "100" (nf Text.encodeUtf8 latinSample100)
-                    ],
-                  bgroup
-                    "greek"
-                    [ bench "1" (nf Text.encodeUtf8 greekSample1),
-                      bench "10" (nf Text.encodeUtf8 greekSample10),
-                      bench "100" (nf Text.encodeUtf8 greekSample100)
-                    ]
-                ]
-            ]
+      bgroup "textUtf8"
+        $ let latinSampleBySize size =
+                enumFromTo 'a' 'z'
+                  & replicate size
+                  & concat
+                  & fromString
+              greekSampleBySize size =
+                enumFromTo 'Α' 'Ω'
+                  & replicate size
+                  & concat
+                  & fromString
+              !latinSample1 = latinSampleBySize 1
+              !latinSample10 = latinSampleBySize 10
+              !latinSample100 = latinSampleBySize 100
+              !greekSample1 = greekSampleBySize 1
+              !greekSample10 = greekSampleBySize 10
+              !greekSample100 = greekSampleBySize 100
+           in [ bgroup
+                  "ptr-poker"
+                  [ bgroup
+                      "latin"
+                      [ bench "1" (nf (Write.writeToByteString . Write.textUtf8) latinSample1),
+                        bench "10" (nf (Write.writeToByteString . Write.textUtf8) latinSample10),
+                        bench "100" (nf (Write.writeToByteString . Write.textUtf8) latinSample100)
+                      ],
+                    bgroup
+                      "greek"
+                      [ bench "1" (nf (Write.writeToByteString . Write.textUtf8) greekSample1),
+                        bench "10" (nf (Write.writeToByteString . Write.textUtf8) greekSample10),
+                        bench "100" (nf (Write.writeToByteString . Write.textUtf8) greekSample100)
+                      ]
+                  ],
+                bgroup
+                  "text"
+                  [ bgroup
+                      "latin"
+                      [ bench "1" (nf Text.encodeUtf8 latinSample1),
+                        bench "10" (nf Text.encodeUtf8 latinSample10),
+                        bench "100" (nf Text.encodeUtf8 latinSample100)
+                      ],
+                    bgroup
+                      "greek"
+                      [ bench "1" (nf Text.encodeUtf8 greekSample1),
+                        bench "10" (nf Text.encodeUtf8 greekSample10),
+                        bench "100" (nf Text.encodeUtf8 greekSample100)
+                      ]
+                  ]
+              ]
     ]
diff --git a/library/PtrPoker/Compat/ByteString.hs b/library/PtrPoker/Compat/ByteString.hs
--- a/library/PtrPoker/Compat/ByteString.hs
+++ b/library/PtrPoker/Compat/ByteString.hs
@@ -3,6 +3,7 @@
 module PtrPoker.Compat.ByteString (poke) where
 
 import Data.ByteString.Internal
+import Foreign.Marshal.Utils
 import qualified PtrPoker.Compat.ForeignPtr as ForeignPtr
 import PtrPoker.Prelude hiding (poke)
 
@@ -14,7 +15,7 @@
 poke (BS fptr length) ptr =
   {-# SCC "poke" #-}
   ForeignPtr.unsafeWithForeignPtr fptr $ \ bytesPtr ->
-    memcpy ptr bytesPtr length $>
+    copyBytes ptr bytesPtr length $>
     plusPtr ptr length
 
 #else
@@ -22,7 +23,7 @@
 poke (PS fptr offset length) ptr =
   {-# SCC "poke" #-}
   ForeignPtr.unsafeWithForeignPtr fptr $ \ bytesPtr ->
-    memcpy ptr (plusPtr bytesPtr offset) length $>
+    copyBytes ptr (plusPtr bytesPtr offset) length $>
     plusPtr ptr length
 
 #endif
diff --git a/library/PtrPoker/Prelude.hs b/library/PtrPoker/Prelude.hs
--- a/library/PtrPoker/Prelude.hs
+++ b/library/PtrPoker/Prelude.hs
@@ -27,7 +27,7 @@
 import Data.Fixed as Exports
 import Data.Foldable as Exports hiding (toList)
 import Data.Function as Exports hiding (id, (.))
-import Data.Functor as Exports
+import Data.Functor as Exports hiding (unzip)
 import Data.Functor.Compose as Exports
 import Data.IORef as Exports
 import Data.Int as Exports
@@ -69,8 +69,6 @@
 import System.Mem as Exports
 import System.Mem.StableName as Exports
 import System.Timeout as Exports
-import Text.ParserCombinators.ReadP as Exports (ReadP, readP_to_S, readS_to_P)
-import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec)
 import Text.Printf as Exports (hPrintf, printf)
 import Text.Read as Exports (Read (..), readEither, readMaybe)
 import Unsafe.Coerce as Exports
diff --git a/ptr-poker.cabal b/ptr-poker.cabal
--- a/ptr-poker.cabal
+++ b/ptr-poker.cabal
@@ -1,7 +1,11 @@
 cabal-version: 3.0
 name:          ptr-poker
-version:       0.1.2.13
+version:       0.1.2.14
 synopsis:      Pointer poking action construction and composition toolkit
+description:
+  Abstraction over memory writes. Efficiently building strict bytestrings is one usecase for it.
+
+category:      Data, Memory, Ptr
 homepage:      https://github.com/nikita-volkov/ptr-poker
 bug-reports:   https://github.com/nikita-volkov/ptr-poker/issues
 author:        Nikita Volkov <nikita.y.volkov@mail.ru>
@@ -82,7 +86,7 @@
 
   build-depends:
     , base >=4.11 && <5
-    , bytestring >=0.10 && <0.12
+    , bytestring >=0.10 && <0.13
     , scientific >=0.3.6.2 && <0.4
     , text >=1 && <3
 
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -65,8 +65,9 @@
     read string === a
 
 prop_nonRealZeroNonRealDoubleAsciiDec =
-  withTests 99 $
-    property $ do
+  withTests 99
+    $ property
+    $ do
       a <- forAll nonRealRealFloatGen
       let string =
             Char8ByteString.unpack (Write.writeToByteString (Write.zeroNonRealDoubleAsciiDec a))
