diff --git a/Control/Concurrent/Spawn.hs b/Control/Concurrent/Spawn.hs
--- a/Control/Concurrent/Spawn.hs
+++ b/Control/Concurrent/Spawn.hs
@@ -1,10 +1,13 @@
-module Control.Concurrent.Spawn(
-    -- * Spawn 
+module Control.Concurrent.Spawn
+  ( -- * Spawn 
     spawn
 
     -- * Spawn with @'try'@
   , Result
-  , spawnTry) where
+  , spawnTry
+  
+    -- * Limiting concurrency
+  , pool ) where
 
 import Control.Concurrent
 import Control.Exception
@@ -30,3 +33,11 @@
 spawn m = do
   r <- spawnTry m
   return (r >>= either throwIO return)
+
+-- | Given /n/, produces a function to wrap @'IO'@ actions.
+-- No more than /n/ wrapped actions will be in progress at
+-- one time.
+pool :: Int -> IO (IO a -> IO a)
+pool n = do
+  s <- newQSem n
+  return $ bracket_ (waitQSem s) (signalQSem s)
diff --git a/spawn.cabal b/spawn.cabal
--- a/spawn.cabal
+++ b/spawn.cabal
@@ -1,5 +1,5 @@
 name:                spawn
-version:             0.1
+version:             0.2
 license:             BSD3
 license-file:        LICENSE
 synopsis:            Tiny library for joinable computations / threads with results.
