diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Pipes-Safe v2.2.5
+# Pipes-Safe v2.2.6
 
 `pipes-safe` builds upon
 [the `pipes` library](https://github.com/Gabriel439/Haskell-Pipes-Library) to
diff --git a/pipes-safe.cabal b/pipes-safe.cabal
--- a/pipes-safe.cabal
+++ b/pipes-safe.cabal
@@ -1,5 +1,5 @@
 Name: pipes-safe
-Version: 2.2.5
+Version: 2.2.6
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 License: BSD3
@@ -43,6 +43,7 @@
         transformers      >= 0.2.0.0 && < 0.6,
         transformers-base >= 0.4.4   && < 0.5,
         monad-control     >= 1.0.0.4 && < 1.1,
+        primitive         >= 0.6.2.0 && < 0.7,
         pipes             >= 4.3.0   && < 4.4
     Exposed-Modules:
         Pipes.Safe,
diff --git a/src/Pipes/Safe.hs b/src/Pipes/Safe.hs
--- a/src/Pipes/Safe.hs
+++ b/src/Pipes/Safe.hs
@@ -121,6 +121,7 @@
 import qualified Control.Monad.Trans.Identity      as I
 import qualified Control.Monad.Cont.Class          as CC
 import qualified Control.Monad.Error.Class         as EC
+import qualified Control.Monad.Primitive           as Prim
 import qualified Control.Monad.Trans.Reader        as R
 import qualified Control.Monad.Trans.RWS.Lazy      as RWS
 import qualified Control.Monad.Trans.RWS.Strict    as RWS'
@@ -216,6 +217,11 @@
              f $ liftM StMT . runInBase . \(SafeT r) -> R.runReaderT r reader'
      restoreM (StMT base) = SafeT $ R.ReaderT $ const $ restoreM base
 #endif
+
+instance Prim.PrimMonad m => Prim.PrimMonad (SafeT m) where
+  type PrimState (SafeT m) = Prim.PrimState m
+  primitive = lift . Prim.primitive
+  {-# INLINE primitive #-}
 
 {-| Run the 'SafeT' monad transformer, executing all unreleased finalizers at
     the end of the computation
