diff --git a/result.cabal b/result.cabal
--- a/result.cabal
+++ b/result.cabal
@@ -1,5 +1,5 @@
 name:                result
-version:             0.2.1.0
+version:             0.2.2.0
 synopsis:            Encode success or at least one error
 homepage:            https://github.com/srijs/haskell-result
 license:             MIT
diff --git a/src/Data/Result.hs b/src/Data/Result.hs
--- a/src/Data/Result.hs
+++ b/src/Data/Result.hs
@@ -4,6 +4,7 @@
   ( Result
   , get, errors
   , raise
+  , accumulate
   ) where
 
 
@@ -86,3 +87,24 @@
       NonEmpty.toList es
     Right _ ->
       []
+
+
+data AccumulatingResult e a = AccRes { getResult :: Result e a }
+
+
+instance Functor (AccumulatingResult e) where
+  fmap f r =
+    AccRes (fmap f (getResult r))
+
+
+instance Applicative (AccumulatingResult e) where
+  pure a =
+    AccRes (pure a)
+
+  x <*> y =
+    AccRes (getResult x `zap` getResult y)
+
+
+accumulate :: Traversable t => t (Result e a) -> Result e (t a)
+accumulate t =
+  getResult (traverse AccRes t)
