diff --git a/result.cabal b/result.cabal
--- a/result.cabal
+++ b/result.cabal
@@ -1,5 +1,5 @@
 name:                result
-version:             0.2.3.0
+version:             0.2.4.0
 synopsis:            Encode success or at least one error
 homepage:            https://github.com/srijs/haskell-result
 license:             MIT
diff --git a/src/Control/Monad/Trans/Result.hs b/src/Control/Monad/Trans/Result.hs
--- a/src/Control/Monad/Trans/Result.hs
+++ b/src/Control/Monad/Trans/Result.hs
@@ -1,8 +1,9 @@
 {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-}
 
 module Control.Monad.Trans.Result
-  ( ResultT, runResultT
-  , raiseT, accumulateT
+  ( ResultT, runResultT, hoist
+  , raiseT, raiseAllT
+  , accumulateT
   ) where
 
 
@@ -46,11 +47,21 @@
     ResultT (pure <$> m)
 
 
+hoist :: Applicative f => Result e a -> ResultT e f a
+hoist r =
+  ResultT (pure r)
+
+
 raiseT :: Applicative f => e -> ResultT e f a
 raiseT e =
-  ResultT (pure (raise e))
+  hoist (raise e)
 
 
+raiseAllT :: Applicative f => [e] -> ResultT e f ()
+raiseAllT es =
+  hoist (raiseAll es)
+
+
 accumulateT :: (Traversable t , Applicative f) => t (ResultT e f a) -> ResultT e f (t a)
 accumulateT results =
   ResultT (accumulate <$> traverse runResultT results)
@@ -58,4 +69,4 @@
 
 instance State.MonadState s m => State.MonadState s (ResultT e m) where
   state f =
-    ResultT (pure <$> State.state f)
+    lift (State.state f)
diff --git a/src/Data/Result.hs b/src/Data/Result.hs
--- a/src/Data/Result.hs
+++ b/src/Data/Result.hs
@@ -3,7 +3,7 @@
 module Data.Result
   ( Result
   , get, errors
-  , raise
+  , raise, raiseAll
   , accumulate
   ) where
 
@@ -69,6 +69,15 @@
 raise :: e -> Result e a
 raise e =
   Result (Left (e NonEmpty.:| []))
+
+
+raiseAll :: [e] -> Result e ()
+raiseAll es =
+  Result $ case es of
+    [] ->
+      Right ()
+    (e:es') ->
+      Left (e NonEmpty.:| es')
 
 
 get :: Result e a -> Maybe a
