diff --git a/Data/Aeson/Types.hs b/Data/Aeson/Types.hs
--- a/Data/Aeson/Types.hs
+++ b/Data/Aeson/Types.hs
@@ -136,6 +136,11 @@
     , JSONKeyOptions
     , keyModifier
     , defaultJSONKeyOptions
+
+    -- * Parsing context
+    , (<?>)
+    , JSONPath
+    , JSONPathElement(..)
     ) where
 
 import Prelude.Compat
diff --git a/Data/Aeson/Types/FromJSON.hs b/Data/Aeson/Types/FromJSON.hs
--- a/Data/Aeson/Types/FromJSON.hs
+++ b/Data/Aeson/Types/FromJSON.hs
@@ -5,7 +5,6 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards #-}
diff --git a/Data/Aeson/Types/Internal.hs b/Data/Aeson/Types/Internal.hs
--- a/Data/Aeson/Types/Internal.hs
+++ b/Data/Aeson/Types/Internal.hs
@@ -99,6 +99,7 @@
 import Data.Typeable (Typeable)
 import Data.Vector (Vector)
 import GHC.Generics (Generic)
+import qualified Control.Monad as Monad
 import qualified Control.Monad.Fail as Fail
 import qualified Data.HashMap.Strict as H
 import qualified Data.Scientific as S
@@ -152,7 +153,7 @@
     fmap _ (Error err) = Error err
     {-# INLINE fmap #-}
 
-instance Monad IResult where
+instance Monad.Monad IResult where
     return = pure
     {-# INLINE return #-}
 
@@ -169,7 +170,7 @@
     fail err = IError [] err
     {-# INLINE fail #-}
 
-instance Monad Result where
+instance Monad.Monad Result where
     return = pure
     {-# INLINE return #-}
 
@@ -288,7 +289,7 @@
                 -> f r
     }
 
-instance Monad Parser where
+instance Monad.Monad Parser where
     m >>= g = Parser $ \path kf ks -> let ks' a = runParser (g a) path kf ks
                                        in runParser m path kf ks'
     {-# INLINE (>>=) #-}
diff --git a/Data/Aeson/Types/ToJSON.hs b/Data/Aeson/Types/ToJSON.hs
--- a/Data/Aeson/Types/ToJSON.hs
+++ b/Data/Aeson/Types/ToJSON.hs
@@ -5,7 +5,6 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE GADTs #-}
-{-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE PatternGuards #-}
diff --git a/aeson.cabal b/aeson.cabal
--- a/aeson.cabal
+++ b/aeson.cabal
@@ -1,5 +1,5 @@
 name:            aeson
-version:         1.4.4.0
+version:         1.4.5.0
 license:         BSD3
 license-file:    LICENSE
 category:        Text, Web, JSON
@@ -107,16 +107,16 @@
     containers       >= 0.4.2.1 && < 0.7,
     deepseq          >= 1.3.0.0 && < 1.5,
     ghc-prim         >= 0.2     && < 0.6,
-    template-haskell >= 2.7.0.0 && < 2.15,
+    template-haskell >= 2.7.0.0 && < 2.16,
     text             >= 1.2.3.0 && < 1.3,
-    time             >= 1.4     && < 1.9
+    time             >= 1.4     && < 1.10
 
   if impl(ghc >= 8.0)
     build-depends: bytestring >= 0.10.8.1
 
   -- Compat
   build-depends:
-    base-compat     >= 0.9.1    && < 0.11,
+    base-compat     >= 0.9.1    && < 0.12,
     time-compat     >= 1.9.2.2  && < 1.10
 
   if flag(bytestring-builder)
diff --git a/benchmarks/AesonEncode.hs b/benchmarks/AesonEncode.hs
--- a/benchmarks/AesonEncode.hs
+++ b/benchmarks/AesonEncode.hs
@@ -7,7 +7,7 @@
 import Prelude.Compat
 
 import Control.DeepSeq
-import Control.Monad
+import Control.Monad (forM_)
 import Data.Aeson
 import Data.Attoparsec.ByteString (IResult(..), parseWith)
 import Data.Char (isDigit)
diff --git a/benchmarks/Compare/JsonBench.hs b/benchmarks/Compare/JsonBench.hs
--- a/benchmarks/Compare/JsonBench.hs
+++ b/benchmarks/Compare/JsonBench.hs
@@ -20,6 +20,7 @@
 import Data.Monoid ((<>))
 import Data.Text (Text)
 import Typed.Common (load)
+import qualified Control.Monad.Fail as Fail
 import qualified Data.Aeson as Aeson
 import qualified Data.BufferBuilder.Json as Json
 
@@ -82,7 +83,7 @@
 fruitTable :: [(Text, Fruit)]
 fruitTable = [("apple", Apple), ("strawberry", Strawberry), ("banana", Banana)]
 
-enumFromJson :: Monad m => String -> [(Text, enum)] -> (json -> m Text) -> json -> m enum
+enumFromJson :: Fail.MonadFail m => String -> [(Text, enum)] -> (json -> m Text) -> json -> m enum
 enumFromJson enumName table extract v = do
     s <- extract v
     case lookup s table of
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,13 @@
 For the latest version of this document, please see [https://github.com/bos/aeson/blob/master/changelog.md](https://github.com/bos/aeson/blob/master/changelog.md).
 
+### 1.4.5.0
+
+* Expose `(<?>)`, `JSONPath` and `JSONPathElement(..)` from `Data.Aeson.Types`. Previously only available through internal modules. Thanks to Luke Clifton.
+
+* Support for base-compat 0.11, thanks to Ryan Scott.
+
+* Travis build for GHC 8.8, thanks to Oleg Grenrus.
+
 ### 1.4.4.0
 
 **New features**:
diff --git a/stack-nightly.yaml b/stack-nightly.yaml
--- a/stack-nightly.yaml
+++ b/stack-nightly.yaml
@@ -1,4 +1,4 @@
-resolver: nightly-2019-05-13
+resolver: nightly-2019-07-11
 packages:
 - '.'
 - attoparsec-iso8601
