diff --git a/pipes-key-value-csv.cabal b/pipes-key-value-csv.cabal
--- a/pipes-key-value-csv.cabal
+++ b/pipes-key-value-csv.cabal
@@ -1,5 +1,5 @@
 name:                pipes-key-value-csv
-version:             0.4.0.0
+version:             0.4.0.1
 synopsis:            Streaming processing of CSV files preceded by key-value pairs.
 description:         Nonstandard CSV files, with the table preceded by a header consisting of key-value pairs are often the output format of varius test equipment, such as digital oscilloscopes.
 homepage:            https://github.com/marcinmrotek/key-value-csv
@@ -37,7 +37,7 @@
                      , Pipes.KeyValueCsv.Internal.Types
                      , Data.Validation
   build-depends:       base               >= 4.8     && < 5
-                     , bifunctors         >= 5.2     && < 5.4
+                     , bifunctors         >= 5.2     && < 5.5
                      , containers         >= 0.5.6   && < 0.6
                      , data-default-class >= 0.0.1   && < 0.2
                      , lens               >= 4.12    && < 4.15
@@ -49,7 +49,7 @@
                      , pipes-safe         >= 2.2     && < 2.3
                      , pipes-text         >= 0.0     && < 0.1
                      , reflection         >= 1.5     && < 2.2
-                     , semigroupoids      >= 5.0.0   && < 5.1
+                     , semigroupoids      >= 5.0.0   && < 5.2
                      , text               >= 1.2     && < 1.3
                      , vinyl              >= 0.5.2   && < 0.6
                      , vinyl-utils        >= 0.2.0.1 && < 0.4
diff --git a/src/Data/Validation.hs b/src/Data/Validation.hs
--- a/src/Data/Validation.hs
+++ b/src/Data/Validation.hs
@@ -29,6 +29,20 @@
 
 data Validation e a = Success a | Failure e
   deriving (Show, Eq, Ord, Data, Functor, Foldable, Generic)
+  
+toEither :: Validation e a -> Either e a
+toEither (Success a) = Right a
+toEither (Failure e) = Left e
+
+fromEither :: Either e a -> Validation e a
+fromEither (Right a) = Success a
+fromEither (Left e) = Failure e
+
+_Either :: Iso (Validation e1 a1) (Validation e2 a2) (Either e1 a1) (Either e2 a2)
+_Either = iso toEither fromEither
+
+_Validation :: Iso (Either e1 a1) (Either e2 a2) (Validation e1 a1) (Validation e2 a2)
+_Validation = iso fromEither toEither
 
 instance Semigroup e => Semigroup (Validation e a) where
   (<>) = app
