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.37
+version:        0.6.2.38
 synopsis:       Primitive functions and data types
 description:    Primitive functions and data types.
 category:       Data
@@ -32,6 +32,7 @@
 common QuickCheck           { build-depends: QuickCheck           >= 2.10       && < 2.14   }
 common bytestring           { build-depends: bytestring           >= 0.9        && < 0.11   }
 common criterion            { build-depends: criterion            >= 1.2        && < 1.6    }
+common deepseq              { build-depends: deepseq              >= 1.4        && < 1.5    }
 common directory            { build-depends: directory            >= 1.2        && < 1.4    }
 common exceptions           { build-depends: exceptions           >= 0.8        && < 0.11   }
 common ghc-prim             { build-depends: ghc-prim             >= 0.5        && < 0.6    }
@@ -54,6 +55,7 @@
   import:   base
           , common
           , bytestring
+          , deepseq
           , ghc-prim
           , mmap
           , semigroups
diff --git a/src/HaskellWorks/Control/Monad/Lazy.hs b/src/HaskellWorks/Control/Monad/Lazy.hs
--- a/src/HaskellWorks/Control/Monad/Lazy.hs
+++ b/src/HaskellWorks/Control/Monad/Lazy.hs
@@ -6,8 +6,11 @@
   , interleaveUnfoldrM
   , interleaveTraverseM
   , interleaveForM
+  , forceM
   ) where
 
+import Control.DeepSeq
+import Control.Monad
 import Control.Monad.IO.Unlift
 
 import qualified System.IO.Unsafe as IO
@@ -59,3 +62,6 @@
 
 interleaveForM :: MonadUnliftIO m => [a] -> (a -> m b) -> m [b]
 interleaveForM = flip interleaveTraverseM
+
+forceM :: (Monad m, NFData a) => m a -> m a
+forceM = (force <$!>)
