diff --git a/result.cabal b/result.cabal
--- a/result.cabal
+++ b/result.cabal
@@ -1,5 +1,5 @@
 name:                result
-version:             0.2.0.0
+version:             0.2.1.0
 synopsis:            Encode success or at least one error
 homepage:            https://github.com/srijs/haskell-result
 license:             MIT
@@ -16,6 +16,7 @@
   hs-source-dirs:      src
   exposed-modules:     Data.Result
   build-depends:       base >= 4 && < 5,
+                       bifunctors,
                        semigroups,
                        keys
   default-language:    Haskell2010
diff --git a/src/Data/Result.hs b/src/Data/Result.hs
--- a/src/Data/Result.hs
+++ b/src/Data/Result.hs
@@ -7,16 +7,28 @@
   ) where
 
 
-import Data.Monoid
+import Data.Bifunctor
+import Data.Bifoldable
+import Data.Bitraversable
 import Data.Key
 import qualified Data.List.NonEmpty as NonEmpty
+import Data.Monoid
 
 
 newtype Result e a =
     Result (Either (NonEmpty.NonEmpty e) a)
-  deriving (Eq, Ord, Show, Functor, Applicative, Monad)
+  deriving (Eq, Ord, Show, Functor, Applicative, Monad, Foldable)
 
 
+instance Traversable (Result e) where
+  traverse f (Result e) =
+    case e of
+      Left es ->
+        pure (Result (Left es))
+      Right a ->
+        Result . Right <$> f a
+
+
 instance Zip (Result e) where
   zipWith f mea meb =
     case (mea, meb) of
@@ -24,6 +36,33 @@
         Result (Right (f eaa eba))
       _ ->
         Result (Left (NonEmpty.fromList (errors mea <> errors meb)))
+
+
+instance Bifunctor Result where
+  bimap f g (Result e) =
+    case e of
+      Left es ->
+        Result (Left (fmap f es))
+      Right a ->
+        Result (Right (g a))
+
+
+instance Bifoldable Result where
+  bifoldMap f g (Result e) =
+    case e of
+      Left es ->
+        foldMap f es
+      Right a ->
+        g a
+
+
+instance Bitraversable Result where
+  bitraverse f g (Result e) =
+    case e of
+      Left es ->
+        Result . Left <$> traverse f es
+      Right a ->
+        Result . Right <$> g a
 
 
 raise :: e -> Result e a
