diff --git a/flags-applicative.cabal b/flags-applicative.cabal
--- a/flags-applicative.cabal
+++ b/flags-applicative.cabal
@@ -1,5 +1,5 @@
 name:                flags-applicative
-version:             0.0.4.1
+version:             0.0.4.2
 synopsis:            Applicative flag parsing
 description:         https://github.com/mtth/flags-applicative
 homepage:            https://github.com/mtth/flags-applicative
@@ -16,11 +16,12 @@
 library
   hs-source-dirs:      src
   exposed-modules:     Flags.Applicative
-  build-depends:       base >= 4.7 && < 5
+  build-depends:       base >= 4.9 && < 5
                      , containers >= 0.6 && < 0.7
                      , mtl >= 2.2 && < 2.3
                      , text >= 1.2 && < 1.3
   default-language:    Haskell2010
+  ghc-options:         -Wall
 
 test-suite flags-applicative-test
   type: exitcode-stdio-1.0
@@ -29,7 +30,7 @@
       test
   ghc-options: -threaded -rtsopts -with-rtsopts=-N
   build-depends:
-      base >=4.7 && <5
+      base >=4.9 && <5
     , text >= 1.2 && < 1.3
     , hspec >=2.6 && <2.7
     , flags-applicative
@@ -39,7 +40,7 @@
   hs-source-dirs:      app
   main-is:             SimpleExample.hs
   build-depends:
-      base >=4.7 && <5
+      base >=4.9 && <5
     , text >= 1.2 && < 1.3
     , flags-applicative
   default-language:    Haskell2010
diff --git a/src/Flags/Applicative.hs b/src/Flags/Applicative.hs
--- a/src/Flags/Applicative.hs
+++ b/src/Flags/Applicative.hs
@@ -39,23 +39,21 @@
   , switch, boolFlag, flag, textFlag, autoFlag, textListFlag, autoListFlag
   ) where
 
-import Control.Applicative ((<|>), Alternative, empty, optional)
+import Control.Applicative ((<|>), Alternative, empty)
 import Control.Monad (when)
 import Control.Monad.Except (Except, catchError, runExcept, throwError)
 import Control.Monad.RWS.Strict (RWST, runRWST)
 import Control.Monad.Reader (asks)
 import Control.Monad.State.Strict (get, modify, put)
-import Data.Bifunctor (first, second)
+import Data.Bifunctor (second)
 import Data.Foldable (foldl', toList)
 import Data.List (isPrefixOf)
 import Data.List.NonEmpty (NonEmpty(..))
 import Data.Map.Strict (Map)
-import Data.Maybe (isJust)
 import Data.Set (Set)
 import Data.Text (Text)
 import System.Exit (die)
 import System.Environment (getArgs)
-import qualified Data.List.NonEmpty as NE
 import qualified Data.Map.Strict as Map
 import qualified Data.Set as Set
 import qualified Data.Text as T
@@ -188,7 +186,7 @@
     case mergeFlags flags1 flags2 of
       Left name -> Invalid $ Duplicate name
       Right flags -> Actionable action flags (usage1 `orElse` usage2) where
-        wrap action = catchError (Just <$> action) $ \case
+        wrap a = catchError (Just <$> a) $ \case
           (MissingValue _) -> pure Nothing
           err -> throwError err
         action = do
