diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for shake-plus
 
+## v0.1.10.0
+
+* Add unlifted versions of `parallel`, `forP` and `par`.
+
 ## v0.1.9.0
 
 * Add lower bound to aeson.
diff --git a/shake-plus.cabal b/shake-plus.cabal
--- a/shake-plus.cabal
+++ b/shake-plus.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 9c8b08ba23e975c98545966a382ba5d9556757e79f7155a51641c9d4c8988d02
+-- hash: 76e2dac824eafd666ea33e941e113adb9b74dd80e7e74a1e609278f5f2302ede
 
 name:           shake-plus
-version:        0.1.9.0
+version:        0.1.10.0
 synopsis:       Re-export of Shake using well-typed paths and ReaderT.
 description:    Re-export of Shake using well-typed paths and ReaderT. You can thread logging through your Shake Actions, and better keep track of source and output folders using the Within type.
 category:       development, shake
diff --git a/src/Development/Shake/Plus/Core.hs b/src/Development/Shake/Plus/Core.hs
--- a/src/Development/Shake/Plus/Core.hs
+++ b/src/Development/Shake/Plus/Core.hs
@@ -11,6 +11,9 @@
 , runRAction
 , runShakePlus
 , runSimpleShakePlus
+, parallel
+, forP
+, par
 , Development.Shake.Action
 , Development.Shake.Rules
 , Development.Shake.FilePattern
@@ -103,3 +106,15 @@
   (lf, dlf) <- newLogFunc (setLogMinLevel LevelInfo lo)
   liftIO $ Development.Shake.shakeArgs Development.Shake.shakeOptions $ void $ runShakePlus lf m
   dlf
+
+-- | Unlifted `Development.Shake.parallel`.
+parallel :: MonadUnliftAction m => [m a] -> m [a]
+parallel xs = withRunInAction $ \run -> Development.Shake.parallel $ fmap run xs
+
+-- | Unlifted `Development.Shake.forP`.
+forP :: MonadUnliftAction m => [a] -> (a -> m b) -> m [b]
+forP x f = withRunInAction $ \run -> Development.Shake.forP x $ run . f
+
+-- | Unlifted `Development.Shake.par`.
+par :: MonadUnliftAction m => m a -> m b -> m (a, b) 
+par a b = withRunInAction $ \run -> Development.Shake.par (run a) (run b)
