diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+1.1.2
+
+* Drop support for GHC-7.8.*, GHC-7.6.*, GHC-7.4.*, and GHC-7.2.*
+* Adjust lower bounds of most dependencies to be inline with the lowest supported GHC version of 7.10.3
+
 1.1.1
 
 * Add `Data.Bifunctor.Swap.Swap` instance from `swap`
diff --git a/src/Data/Validation.hs b/src/Data/Validation.hs
--- a/src/Data/Validation.hs
+++ b/src/Data/Validation.hs
@@ -1,12 +1,10 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 {-# LANGUAGE TypeFamilies #-}
 
-#if __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE DeriveGeneric #-}
-#endif
-
 -- | A data type similar to @Data.Either@ that accumulates failures.
 module Data.Validation
 (
@@ -44,11 +42,13 @@
 import Control.DeepSeq (NFData (rnf))
 import Control.Lens (over, under)
 import Control.Lens.Getter((^.))
-import Control.Lens.Iso(Iso, iso, from)
+import Control.Lens.Iso(Iso, iso, from
 #if !MIN_VERSION_lens(4,20,0)
-import Control.Lens.Iso(Swapped(..))
+                       , Swapped(..))
+#else
+                       )
 #endif
-import Control.Lens.Prism(Prism, prism)
+import Control.Lens.Prism(Prism, _Left, _Right)
 import Control.Lens.Review(( # ))
 import Data.Bifoldable(Bifoldable(bifoldr))
 import Data.Bifunctor(Bifunctor(bimap))
@@ -68,13 +68,11 @@
 import Data.Semigroup(Semigroup((<>)))
 import Data.Traversable(Traversable(traverse))
 import Data.Typeable(Typeable)
-#if __GLASGOW_HASKELL__ >= 702
 import GHC.Generics (Generic)
-#endif
 import Prelude(Show, Maybe(..))
 
 
--- | An @Validation@ is either a value of the type @err@ or @a@, similar to 'Either'. However,
+-- | A @Validation@ is either a value of the type @err@ or @a@, similar to 'Either'. However,
 -- the 'Applicative' instance for @Validation@ /accumulates/ errors using a 'Semigroup' on @err@.
 -- In contrast, the @Applicative@ for @Either@ returns only the first error.
 --
@@ -87,12 +85,7 @@
 data Validation err a =
   Failure err
   | Success a
-  deriving (
-    Eq, Ord, Show, Data, Typeable
-#if __GLASGOW_HASKELL__ >= 702
-    , Generic
-#endif
-  )
+  deriving (Data, Eq, Generic, Ord, Show, Typeable)
 
 instance Functor (Validation err) where
   fmap _ (Failure e) =
@@ -237,7 +230,7 @@
 
 -- | 'validation' is the catamorphism for @Validation@.
 validation :: (e -> c) -> (a -> c) -> Validation e a -> c
-validation ec ac v = case v of
+validation ec ac = \case
   Failure e -> ec e
   Success a -> ac a
 
@@ -284,7 +277,7 @@
 -- @
 ensure :: Validate v => e -> (a -> Maybe b) -> v e a -> v e b
 ensure e p =
-  over _Validation $ \v -> case v of
+  over _Validation $ \case
     Failure x -> Failure x
     Success a -> validate e p a
 
@@ -295,9 +288,9 @@
 --
 -- @(Either e a -> Either e' a') -> Validation e a -> Validation e' a'@
 validationed :: Validate v => (v e a -> v e' a') -> Validation e a -> Validation e' a'
-validationed f = under _Validation f
+validationed = under _Validation
 
--- | @bindValidation@ binds through an Validation, which is useful for
+-- | @bindValidation@ binds through a Validation, which is useful for
 -- composing Validations sequentially. Note that despite having a bind
 -- function of the correct type, Validation is not a monad.
 -- The reason is, this bind does not accumulate errors, so it does not
@@ -318,29 +311,13 @@
 
   _Either ::
     Iso (f e a) (f g b) (Either e a) (Either g b)
-  _Either =
-    iso
-      (\x -> case x ^. _Validation of
-        Failure e -> Left e
-        Success a -> Right a)
-      (\x -> _Validation # case x of
-        Left e -> Failure e
-        Right a -> Success a)
+  _Either = _Validation . iso toEither fromEither
   {-# INLINE _Either #-}
 
 instance Validate Validation where
   _Validation =
     id
   {-# INLINE _Validation #-}
-  _Either =
-    iso
-      (\x -> case x of
-        Failure e -> Left e
-        Success a -> Right a)
-      (\x -> case x of
-        Left e -> Failure e
-        Right a -> Success a)
-  {-# INLINE _Either #-}
 
 instance Validate Either where
   _Validation =
@@ -356,24 +333,14 @@
 _Failure ::
   Validate f =>
   Prism (f e1 a) (f e2 a) e1 e2
-_Failure =
-  prism
-    (\x -> _Either # Left x)
-    (\x -> case x ^. _Either of
-             Left e -> Right e
-             Right a -> Left (_Either # Right a))
+_Failure = _Either . _Left
 {-# INLINE _Failure #-}
 
 -- | This prism generalises 'Control.Lens.Prism._Right'. It targets the success case of either 'Either' or 'Validation'.
 _Success ::
   Validate f =>
   Prism (f e a) (f e b) a b
-_Success =
-  prism
-    (\x -> _Either # Right x)
-    (\x -> case x ^. _Either of
-             Left e -> Left (_Either # Left e)
-             Right a -> Right a)
+_Success = _Either . _Right
 {-# INLINE _Success #-}
 
 -- | 'revalidate' converts between any two instances of 'Validate'.
diff --git a/validation.cabal b/validation.cabal
--- a/validation.cabal
+++ b/validation.cabal
@@ -1,5 +1,5 @@
 name:               validation
-version:            1.1.1
+version:            1.1.2
 license:            BSD3
 license-file:       LICENCE
 author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>, Nick Partridge <nkpart>
@@ -35,7 +35,7 @@
 cabal-version:      >= 1.10
 build-type:         Simple
 extra-source-files: changelog
-tested-with:        GHC==8.6.4, GHC==8.4.4, GHC==8.2.2, GHC==8.0.2, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2
+tested-with:        GHC==9.0.1, GHC==8.10.4, GHC==8.8.4, GHC==8.6.5, GHC==8.4.4, GHC==8.2.2, GHC==8.0.2, GHC==7.10.3
 
 source-repository   head
   type:             git
@@ -46,15 +46,13 @@
                     Haskell2010
 
   build-depends:
-                      base          >= 4.5 && < 5
-                    , assoc         >= 1   && < 1.1
-                    , deepseq       >= 1.2 && < 1.5
-                    , semigroups    >= 0.8 && < 1
-                    , semigroupoids >= 5   && < 6
-                    , bifunctors    >= 5.1 && < 6
-                    , lens          >= 4   && < 5.1
-  if impl(ghc>=7.2) && impl(ghc<7.5)
-    build-depends: ghc-prim == 0.2.0.0
+                      base          >= 4.8  && < 5
+                    , assoc         >= 1    && < 1.1
+                    , deepseq       >= 1.4  && < 1.5
+                    , semigroups    >= 0.16 && < 1
+                    , semigroupoids >= 5    && < 6
+                    , bifunctors    >= 5.5  && < 6
+                    , lens          >= 4    && < 6
 
   ghc-options:
                     -Wall
@@ -76,9 +74,9 @@
                     Haskell2010
 
   build-depends:
-                      base       >= 3   && < 5
-                    , hedgehog   >= 0.5 && < 1.1
-                    , semigroups >= 0.8 && < 1
+                      base       >= 4.8  && < 5
+                    , hedgehog   >= 0.5  && < 1.1
+                    , semigroups >= 0.16 && < 1
                     , validation
 
   ghc-options:
@@ -99,10 +97,10 @@
                     Haskell2010
 
   build-depends:
-                      base       >= 3   && < 5
-                    , HUnit      >= 1.5 && < 1.7
-                    , lens
-                    , semigroups >= 0.8 && < 1
+                      base       >= 4.8  && < 5
+                    , HUnit      >= 1.5  && < 1.7
+                    , lens       >= 4    && < 5
+                    , semigroups >= 0.16 && < 1
                     , validation
 
   ghc-options:
