diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,13 @@
 # ChangeLog for yesod
 
+## 1.6.2.3
+
+* Support `yesod-core` 1.7
+
+## 1.6.2.2
+
+* Set `base >= 4.11` for less CPP and imports [#1876](https://github.com/yesodweb/yesod/pull/1876)
+
 ## 1.6.2.1
 
 * Support `template-haskell-2.19.0.0` [#1769](https://github.com/yesodweb/yesod/pull/1769)
diff --git a/Yesod.hs b/Yesod.hs
--- a/Yesod.hs
+++ b/Yesod.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE CPP #-}
 -- | This module simply re-exports from other modules for your convenience.
 module Yesod
     ( -- * Re-exports from yesod-core
diff --git a/Yesod/Default/Config.hs b/Yesod/Default/Config.hs
--- a/Yesod/Default/Config.hs
+++ b/Yesod/Default/Config.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
 module Yesod.Default.Config
     ( DefaultEnv (..)
     , fromArgs
@@ -18,7 +20,15 @@
 import Data.Char (toUpper)
 import Data.Text (Text)
 import qualified Data.Text as T
-import Data.Yaml
+import Data.Yaml (
+    Object,
+    Parser,
+    Value (..),
+    decodeFileEither,
+    parseEither,
+    prettyPrintParseException,
+    (.:)
+ )
 import Data.Maybe (fromMaybe)
 import System.Environment (getArgs, getProgName, getEnvironment)
 import System.Exit (exitFailure)
@@ -44,9 +54,9 @@
     , port        :: Int
     } deriving Show
 
-parseArgConfig :: (Show env, Read env, Enum env, Bounded env) => IO (ArgConfig env)
+parseArgConfig :: forall env. (Show env, Read env, Enum env, Bounded env) => IO (ArgConfig env)
 parseArgConfig = do
-    let envs = [minBound..maxBound]
+    let envs = [minBound..maxBound] :: [env]
     args <- getArgs
     (portS, args') <- getPort id args
     portI <-
@@ -57,10 +67,7 @@
         [e] -> do
             case reads $ capitalize e of
                 (e', _):_ -> return $ ArgConfig e' portI
-                [] -> do
-                    () <- error $ "Invalid environment, valid entries are: " ++ show envs
-                    -- next line just provided to force the type of envs
-                    return $ ArgConfig (head envs) 0
+                [] -> error $ "Invalid environment, valid entries are: " ++ show envs
         _ -> do
             pn <- getProgName
             putStrLn $ "Usage: " ++ pn ++ " <environment> [--port <port>]"
@@ -194,7 +201,7 @@
             _ -> fail "Expected map"
 
     let host    = fromString $ T.unpack $ fromMaybe "*" $ lookupScalar "host"    m
-    mport <- parseMonad (\x -> x .: "port") m
+    mport <- parseEitherM (\x -> x .: "port") m
     let approot' = fromMaybe "" $ lookupScalar "approot" m
 
     -- Handle the DISPLAY_PORT environment variable for yesod devel
@@ -207,7 +214,7 @@
                     Nothing -> return approot'
                     Just p -> return $ prefix `T.append` T.pack (':' : p)
 
-    extra <- parseMonad (parseExtra env) m
+    extra <- parseEitherM (parseExtra env) m
 
     -- set some default arguments
     let port' = fromMaybe 80 mport
@@ -243,5 +250,9 @@
         Left err ->
           fail $ "Invalid YAML file: " ++ show fp ++ " " ++ prettyPrintParseException err
         Right (Object obj)
-            | Just v <- M.lookup (fromString $ show env) obj -> parseMonad f v
+            | Just v <- M.lookup (fromString $ show env) obj -> parseEitherM f v
         _ -> fail $ "Could not find environment: " ++ show env
+
+-- | Replacement for `parseMonad`
+parseEitherM :: (a -> Parser b) -> a -> IO b
+parseEitherM p = either fail pure . parseEither p
diff --git a/Yesod/Default/Config2.hs b/Yesod/Default/Config2.hs
--- a/Yesod/Default/Config2.hs
+++ b/Yesod/Default/Config2.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
+
 -- | Some next-gen helper functions for the scaffolding's configuration system.
 module Yesod.Default.Config2
     ( -- * Locally defined
@@ -28,7 +29,6 @@
 
 import Data.Yaml.Config
 
-import Data.Semigroup
 import Data.Aeson
 import System.Environment (getEnvironment)
 import Network.Wai (Application)
diff --git a/Yesod/Default/Handlers.hs b/Yesod/Default/Handlers.hs
--- a/Yesod/Default/Handlers.hs
+++ b/Yesod/Default/Handlers.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
+
 module Yesod.Default.Handlers
     ( getFaviconR
     , getRobotsR
diff --git a/Yesod/Default/Main.hs b/Yesod/Default/Main.hs
--- a/Yesod/Default/Main.hs
+++ b/Yesod/Default/Main.hs
@@ -1,6 +1,7 @@
-{-# LANGUAGE CPP                #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE TemplateHaskell    #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
+
 module Yesod.Default.Main
     ( defaultMain
     , defaultMainLog
@@ -46,7 +47,7 @@
 defaultMain load getApp = do
     config <- load
     app <- getApp config
-    runSettings 
+    runSettings
         ( setPort (appPort config)
         $ setHost (appHost config)
         $ defaultSettings
@@ -64,7 +65,7 @@
 defaultMainLog load getApp = do
     config <- load
     (app, logFunc) <- getApp config
-    runSettings 
+    runSettings
         ( setPort (appPort config)
         $ setHost (appHost config)
         $ setOnException (const $ \e -> when (shouldLog' e) $ logFunc
diff --git a/Yesod/Default/Util.hs b/Yesod/Default/Util.hs
--- a/Yesod/Default/Util.hs
+++ b/Yesod/Default/Util.hs
@@ -1,6 +1,7 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE CPP #-}
+
 -- | Various utilities used in the scaffolded site.
 module Yesod.Default.Util
     ( addStaticContentExternal
@@ -22,7 +23,10 @@
 import Control.Monad (when, unless)
 import Conduit
 import System.Directory (doesFileExist, createDirectoryIfMissing)
-import Language.Haskell.TH.Syntax hiding (makeRelativeToProject)
+import Language.Haskell.TH.Syntax
+#if MIN_VERSION_template_haskell(2,19,0)
+    hiding (makeRelativeToProject)
+#endif
 import Text.Lucius (luciusFile, luciusFileReload)
 import Text.Julius (juliusFile, juliusFileReload)
 import Text.Cassius (cassiusFile, cassiusFileReload)
diff --git a/yesod.cabal b/yesod.cabal
--- a/yesod.cabal
+++ b/yesod.cabal
@@ -1,5 +1,5 @@
 name:            yesod
-version:         1.6.2.1
+version:         1.6.2.3
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -18,14 +18,14 @@
     if os(windows)
         cpp-options: -DWINDOWS
 
-    build-depends:   base                      >= 4.10     && < 5
+    build-depends:   base                      >= 4.11     && < 5
                    , aeson
                    , bytestring
                    , conduit                   >= 1.3
                    , data-default-class
                    , directory
                    , fast-logger
-                   , file-embed
+                   , file-embed                >= 0.0.10
                    , monad-logger
                    , shakespeare
                    , streaming-commons
@@ -37,7 +37,7 @@
                    , wai-logger
                    , warp                      >= 1.3
                    , yaml                      >= 0.8.17
-                   , yesod-core                >= 1.6      && < 1.7
+                   , yesod-core                >= 1.6      && < 1.8
                    , yesod-form                >= 1.6      && < 1.8
                    , yesod-persistent          >= 1.6      && < 1.7
 
