diff --git a/hw-prelude.cabal b/hw-prelude.cabal
--- a/hw-prelude.cabal
+++ b/hw-prelude.cabal
@@ -1,6 +1,6 @@
 cabal-version:          3.4
 name:                   hw-prelude
-version:                0.0.4.2
+version:                0.0.4.3
 synopsis:               Opinionated prelude library
 description:            Opinionated prelude library.
 license:                Apache-2.0
diff --git a/src/HaskellWorks/Control/Monad.hs b/src/HaskellWorks/Control/Monad.hs
--- a/src/HaskellWorks/Control/Monad.hs
+++ b/src/HaskellWorks/Control/Monad.hs
@@ -1,9 +1,22 @@
 module HaskellWorks.Control.Monad
-  ( repeatNUntilM_,
+  ( whileM,
+    unlessM,
+
+    repeatNUntilM_,
     repeatNWhileM_,
   ) where
 
 import           HaskellWorks.Prelude
+
+whileM :: Monad m => m Bool -> m ()
+whileM act = do
+  b <- act
+  when b $ whileM act
+
+unlessM :: Monad m => m Bool -> m ()
+unlessM act = do
+  b <- act
+  unless b $ unlessM act
 
 -- | Repeat an action n times until the action returns True.
 repeatNUntilM_ :: ()
