diff --git a/Command.cabal b/Command.cabal
--- a/Command.cabal
+++ b/Command.cabal
@@ -1,5 +1,5 @@
 Name:               Command
-Version:            0.0.4
+Version:            0.0.5
 License:            BSD3
 License-File:       LICENSE
 Author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
diff --git a/src/System/Command.hs b/src/System/Command.hs
--- a/src/System/Command.hs
+++ b/src/System/Command.hs
@@ -37,6 +37,7 @@
 , (<<<-)
 , (<-<-)
 , runExitCodes
+, traverseExitCodes
   -- * Process completion
 , waitForProcess
 , getProcessExitCode
@@ -49,6 +50,7 @@
 import Data.Monoid
 import Control.Arrow
 import Control.Exception
+import Control.Monad
 import Prelude hiding (foldr)
 import Data.Foldable
 
@@ -177,7 +179,7 @@
   -> m ()
 a ->>> b =
   do a' <- a
-     if isSuccess a' then b >> return () else return ()
+     when (isSuccess a') (void b) -- if isSuccess a' then b >> return () else return ()
 
 -- | Runs the first action.
 --
@@ -231,6 +233,15 @@
   -> m ExitCode
 runExitCodes =
   foldr (->>) (return success)
+
+-- | Traverse the structure of actions stopping at the first failure.
+traverseExitCodes ::
+  (Monad m, Foldable f, Functor f) =>
+  (a -> m ExitCode)
+  -> f a
+  -> m ExitCode
+traverseExitCodes f =
+  runExitCodes . fmap f
 
 -- | readProcessWithExitCode creates an external process, reads its
 -- standard output and standard error strictly, waits until the process
