diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# 0.5 (2021-03-22)
+
+- Trim lower bounds
+- Remove `Data.Aeson.Extra.Map` (use recent `aeson`).
+- Remove `Data.Aeson.Time` (use recent `aeson`)
+
 # 0.4.1.3 (2019-10-21)
 
 - support semialign-1.1
diff --git a/aeson-extra.cabal b/aeson-extra.cabal
--- a/aeson-extra.cabal
+++ b/aeson-extra.cabal
@@ -1,6 +1,6 @@
 cabal-version:      >=1.10
 name:               aeson-extra
-version:            0.4.1.3
+version:            0.5
 synopsis:           Extra goodies for aeson
 description:
   Package provides extra functionality on top of @aeson@ and @aeson-compat@
@@ -13,14 +13,15 @@
 license:            BSD3
 license-file:       LICENSE
 tested-with:
-  GHC ==7.6.3
-   || ==7.8.4
+  GHC ==7.8.4
    || ==7.10.3
    || ==8.0.2
    || ==8.2.2
    || ==8.4.4
    || ==8.6.5
-   || ==8.8.1
+   || ==8.8.4
+   || ==8.10.4
+   || ==9.0.1
 
 build-type:         Simple
 extra-source-files:
@@ -35,46 +36,39 @@
   hs-source-dirs:   src
   ghc-options:      -Wall
   build-depends:
-      aeson                  >=0.7.0.6  && <1.5
-    , aeson-compat           >=0.3.0.0  && <0.4
+      aeson                  >=1.5.4.1  && <1.6
     , attoparsec             >=0.11.3.4 && <0.14
     , attoparsec-iso8601     >=1.0      && <1.1
-    , base                   >=4.6      && <4.14
-    , base-compat-batteries  >=0.10.1   && <0.12
-    , bytestring             >=0.10     && <0.11
+    , base                   >=4.7      && <4.16
+    , base-compat-batteries  >=0.11.2   && <0.12
+    , bytestring             >=0.10     && <0.12
     , containers             >=0.5      && <0.7
     , deepseq                >=1.3      && <1.5
     , exceptions             >=0.8      && <0.11
     , hashable               >=1.2      && <1.4
     , parsec                 >=3.1.9    && <3.2
-    , recursion-schemes      >=4.1.2    && <5.2
+    , recursion-schemes      >=4.1.2    && <5.3
     , scientific             >=0.3      && <0.4
-    , semialign              >=1        && <1.2
-    , template-haskell       >=2.8      && <2.16
+    , semialign              >=1        && <1.3
+    , template-haskell       >=2.8      && <2.18
     , text                   >=1.2      && <1.3
-    , these                  >=1        && <1.1
-    , time                   >=1.4.0.1  && <1.10
+    , these                  >=1        && <1.2
     , unordered-containers   >=0.2      && <0.3
     , vector                 >=0.10     && <0.13
 
   if !impl(ghc >=8.2)
     build-depends: bifunctors >=5.5.2 && <5.6
 
-  if impl(ghc >=7.8)
-    exposed-modules:
-      Data.Aeson.Extra.SingObject
-      Data.Aeson.Extra.SymTag
-
   exposed-modules:
     Data.Aeson.Extra
     Data.Aeson.Extra.CollapsedList
     Data.Aeson.Extra.Foldable
-    Data.Aeson.Extra.Map
     Data.Aeson.Extra.Merge
     Data.Aeson.Extra.Recursive
+    Data.Aeson.Extra.SingObject
     Data.Aeson.Extra.Stream
+    Data.Aeson.Extra.SymTag
     Data.Aeson.Extra.TH
-    Data.Aeson.Extra.Time
 
   default-language: Haskell2010
 
@@ -84,15 +78,16 @@
   hs-source-dirs:   test
   ghc-options:      -Wall
   build-depends:
-      aeson-extra
+      aeson
+    , aeson-extra
     , base
+    , base-compat-batteries
     , containers
-    , quickcheck-instances  >=0.3     && <0.4
-    , tasty                 >=0.10    && <1.3
-    , tasty-hunit           >=0.9     && <0.11
-    , tasty-quickcheck      >=0.8     && <0.11
-    , time
-    , time-parsers          >=0.1.0.0 && <0.2
+    , quickcheck-instances   >=0.3     && <0.4
+    , tasty                  >=0.10    && <1.5
+    , tasty-hunit            >=0.9     && <0.11
+    , tasty-quickcheck       >=0.8     && <0.11
+    , time-parsers           >=0.1.0.0 && <0.2
     , unordered-containers
     , vector
 
diff --git a/src/Data/Aeson/Extra.hs b/src/Data/Aeson/Extra.hs
--- a/src/Data/Aeson/Extra.hs
+++ b/src/Data/Aeson/Extra.hs
@@ -9,66 +9,47 @@
 --
 -- More or less useful newtypes for writing 'FromJSON' & 'ToJSON' instances
 module Data.Aeson.Extra (
-  -- * Strict encoding
-  encodeStrict,
-  -- * Generic maps
-  M(..),
-  FromJSONKey(..),
-  parseIntegralJSONKey,
-  FromJSONMap(..),
-  ToJSONKey(..),
-  ToJSONMap(..),
-#if MIN_VERSION_base(4,7,0)
-  -- * Symbol tag
-  SymTag(..),
-  -- * Singleton object
-  SingObject(..),
-  mkSingObject,
-  getSingObject,
-#endif
-  -- * CollapsedList
-  CollapsedList(..),
-  getCollapsedList,
-  parseCollapsedList,
-  -- * UTCTime
-  U(..),
-  Z(..),
-  -- * Algebra
-  ValueF(..),
-  ObjectF,
-  ArrayF,
-  -- * Merge
-  merge,
-  lodashMerge,
-  -- * Stream
-  streamDecode,
-  -- * Template Haskell
-  mkValue,
-  mkValue',
-  -- * Re-exports
-  module Data.Aeson.Compat,
-  ) where
+    -- * Strict encoding
+    encodeStrict,
+    -- * Symbol tag
+    SymTag(..),
+    -- * Singleton object
+    SingObject(..),
+    mkSingObject,
+    getSingObject,
+    -- * CollapsedList
+    CollapsedList(..),
+    getCollapsedList,
+    parseCollapsedList,
+    -- * Algebra
+    ValueF(..),
+    ObjectF,
+    ArrayF,
+    -- * Merge
+    merge,
+    lodashMerge,
+    -- * Stream
+    streamDecode,
+    -- * Template Haskell
+    mkValue,
+    mkValue',
+) where
 
 import Prelude ()
 import Prelude.Compat
 
-import Data.Aeson.Compat
+import Data.Aeson
 
 import qualified Data.ByteString      as BS
 import qualified Data.ByteString.Lazy as LBS
 
 import Data.Aeson.Extra.CollapsedList
-import Data.Aeson.Extra.Map
 import Data.Aeson.Extra.Merge
-import Data.Aeson.Extra.Recursive
-import Data.Aeson.Extra.Stream
-import Data.Aeson.Extra.TH
-import Data.Aeson.Extra.Time
-
-#if MIN_VERSION_base(4,7,0)
+import Data.Aeson.Extra.Recursive ()
 import Data.Aeson.Extra.SingObject
+import Data.Aeson.Extra.Stream
 import Data.Aeson.Extra.SymTag
-#endif
+import Data.Aeson.Extra.TH
 
 -- | Like 'encode', but produces strict 'BS.ByteString'.
 --
diff --git a/src/Data/Aeson/Extra/CollapsedList.hs b/src/Data/Aeson/Extra/CollapsedList.hs
--- a/src/Data/Aeson/Extra/CollapsedList.hs
+++ b/src/Data/Aeson/Extra/CollapsedList.hs
@@ -22,7 +22,6 @@
 import Prelude.Compat
 
 import Control.Applicative (Alternative (..))
-import Data.Aeson.Compat
 import Data.Aeson.Types    hiding ((.:?))
 import Data.Text           (Text)
 
@@ -32,10 +31,8 @@
 
 import qualified Data.Foldable       as Foldable
 import qualified Data.HashMap.Strict as HM
+import qualified Data.Text           as T
 
-#if MIN_VERSION_aeson(0,10,0)
-import qualified Data.Text as T
-#endif
 
 -- | Collapsed list, singleton is represented as the value itself in JSON encoding.
 --
@@ -64,9 +61,8 @@
 getCollapsedList :: CollapsedList f a -> f a
 getCollapsedList (CollapsedList l) = l
 
-#if MIN_VERSION_aeson(1,0,0)
 instance (FromJSON1 f, Alternative f) => FromJSON1 (CollapsedList f) where
-    liftParseJSON p _ v = CollapsedList <$> case v of 
+    liftParseJSON p _ v = CollapsedList <$> case v of
         Null    -> pure Control.Applicative.empty
         Array _ -> liftParseJSON p (listParser p) v
         x       -> pure <$> p x
@@ -112,48 +108,3 @@
         Just v    -> modifyFailure addKeyName $ (getCollapsedList <$> parseJSON v) -- <?> Key key
   where
     addKeyName = (mappend ("failed to parse field " `mappend` T.unpack key `mappend`": "))
-
-#else
-instance (FromJSON a, FromJSON (f a), Alternative f) => FromJSON (CollapsedList f a) where
-    parseJSON Null         = pure (CollapsedList Control.Applicative.empty)
-    parseJSON v@(Array _)  = CollapsedList <$> parseJSON v
-    parseJSON v            = CollapsedList . pure <$> parseJSON v
-
-instance (ToJSON a, ToJSON (f a), Foldable f) => ToJSON (CollapsedList f a) where
-#if MIN_VERSION_aeson (0,10,0)
-    toEncoding (CollapsedList l) =
-        case Foldable.toList l of
-            []   -> toEncoding Null
-            [x]  -> toEncoding x
-            _    -> toEncoding l
-#endif
-    toJSON (CollapsedList l) =
-        case Foldable.toList l of
-            []   -> toJSON Null
-            [x]  -> toJSON x
-            _    -> toJSON l
-
--- | Parses possibly collapsed array value from the object's field.
---
--- > λ > newtype V = V [Int] deriving (Show)
--- > λ > instance FromJSON V where parseJSON = withObject "V" $ \obj -> V <$> parseCollapsedList obj "value"
--- > λ > decode "{}" :: Maybe V
--- > Just (V [])
--- > λ > decode "{\"value\": null}" :: Maybe V
--- > Just (V [])
--- > λ > decode "{\"value\": 42}" :: Maybe V
--- > Just (V [42])
--- > λ > decode "{\"value\": [1, 2, 3, 4]}" :: Maybe V
--- > Just (V [1,2,3,4])
-parseCollapsedList :: (FromJSON a, FromJSON (f a), Alternative f) => Object -> Text -> Parser (f a)
-parseCollapsedList obj key =
-    case HM.lookup key obj of
-        Nothing   -> pure Control.Applicative.empty
-#if MIN_VERSION_aeson(0,10,0)
-        Just v    -> modifyFailure addKeyName $ (getCollapsedList <$> parseJSON v) -- <?> Key key
-  where
-    addKeyName = (mappend ("failed to parse field " `mappend` T.unpack key `mappend`": "))
-#else
-        Just v    -> getCollapsedList <$> parseJSON v
-#endif
-#endif
diff --git a/src/Data/Aeson/Extra/Map.hs b/src/Data/Aeson/Extra/Map.hs
deleted file mode 100644
--- a/src/Data/Aeson/Extra/Map.hs
+++ /dev/null
@@ -1,101 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable     #-}
-{-# LANGUAGE DeriveFoldable         #-}
-{-# LANGUAGE DeriveFunctor          #-}
-{-# LANGUAGE DeriveTraversable      #-}
-{-# LANGUAGE FlexibleInstances      #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE UndecidableInstances   #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Aeson.Extra.Map
--- Copyright   :  (C) 2015-2016 Oleg Grenrus
--- License     :  BSD3
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
--- More or less useful newtypes for writing 'FromJSON' & 'ToJSON' instances
-module Data.Aeson.Extra.Map {-# DEPRECATED "Use aeson-1 TOJSONKey etc functionality" #-} (
-  M(..),
-  FromJSONKey(..),
-  parseIntegralJSONKey,
-  FromJSONMap(..),
-  ToJSONKey(..),
-  ToJSONMap(..),
-  ) where
-
-import Prelude ()
-import Prelude.Compat
-
-import Data.Aeson.Compat
-       (FromJSON (..), ToJSON (..), Value (..), withObject)
-import Data.Aeson.Types      (Parser)
-import Data.Hashable         (Hashable)
-import Data.Semigroup.Compat ((<>))
-import Data.Text             (Text)
-import Data.Typeable         (Typeable)
-
-import qualified Data.HashMap.Strict as HM
-import qualified Data.Map            as Map
-import qualified Data.Text           as T
-import qualified Data.Text.Lazy      as LT
-import qualified Data.Text.Read      as T
-
--- | A wrapper type to parse arbitrary maps
---
--- > λ > decode "{\"1\": 1, \"2\": 2}" :: Maybe (M (H.HashMap Int Int))
--- > Just (M {getMap = fromList [(1,1),(2,2)]})
-newtype M a = M { getMap :: a }
-  deriving (Eq, Ord, Show, Read, Functor, Foldable, Traversable, Typeable)
-{-# DEPRECATED M "Use aeson-1 TOJSONKey etc functionality" #-}
-
-class FromJSONKey a where
-  parseJSONKey :: Text -> Parser a
-
-instance FromJSONKey Text where parseJSONKey = pure
-instance FromJSONKey LT.Text where parseJSONKey = pure . LT.fromStrict
-instance FromJSONKey String where parseJSONKey = pure . T.unpack
-instance FromJSONKey Int where parseJSONKey = parseIntegralJSONKey
-instance FromJSONKey Integer where parseJSONKey = parseIntegralJSONKey
-
-parseIntegralJSONKey :: Integral a => Text -> Parser a
-parseIntegralJSONKey t = case T.signed T.decimal t of
-  Right (v, left) | T.null left  -> pure v
-                  | otherwise    -> fail $ "Garbage left: " <> T.unpack left
-  Left err                       -> fail err
-
-class FromJSONMap m k v | m -> k v where
-  parseJSONMap :: HM.HashMap Text Value -> Parser m
-
-instance (Eq k, Hashable k, FromJSONKey k, FromJSON v) => FromJSONMap (HM.HashMap k v) k v where
-  parseJSONMap = fmap HM.fromList . traverse f . HM.toList
-    where f (k, v) = (,) <$> parseJSONKey k <*> parseJSON v
-
-instance (Ord k, FromJSONKey k, FromJSON v) => FromJSONMap (Map.Map k v) k v where
-  parseJSONMap = fmap Map.fromList . traverse f . HM.toList
-    where f (k, v) = (,) <$> parseJSONKey k <*> parseJSON v
-
-instance (FromJSONMap m k v) => FromJSON (M m) where
-  parseJSON v = M <$> withObject "Map" parseJSONMap v
-
-
-class ToJSONKey a where
-  toJSONKey :: a -> Text
-
-instance ToJSONKey Text where toJSONKey = id
-instance ToJSONKey LT.Text where toJSONKey = LT.toStrict
-instance ToJSONKey String where toJSONKey = T.pack
-instance ToJSONKey Int where toJSONKey = T.pack . show
-instance ToJSONKey Integer where toJSONKey = T.pack . show
-
-class ToJSONMap m k v | m -> k v where
-  toJSONMap :: m -> HM.HashMap Text Value
-
-instance (ToJSONKey k, ToJSON v) => ToJSONMap (HM.HashMap k v) k v where
-  toJSONMap = HM.fromList . fmap f . HM.toList
-    where f (k, v) = (toJSONKey k, toJSON v)
-
-instance (ToJSONKey k, ToJSON v) => ToJSONMap (Map.Map k v) k v where
-  toJSONMap = HM.fromList . fmap f . Map.toList
-    where f (k, v) = (toJSONKey k, toJSON v)
-
-instance (ToJSONMap m k v) => ToJSON (M m) where
-  toJSON (M m) = Object (toJSONMap m)
diff --git a/src/Data/Aeson/Extra/Merge.hs b/src/Data/Aeson/Extra/Merge.hs
--- a/src/Data/Aeson/Extra/Merge.hs
+++ b/src/Data/Aeson/Extra/Merge.hs
@@ -15,14 +15,14 @@
     ArrayF,
     ) where
 
-import Prelude        ()
+import Prelude ()
 import Prelude.Compat
 
-import Data.Aeson.Compat
+import Data.Aeson
 import Data.Aeson.Extra.Recursive
-import Data.These (These (..))
-import Data.Align (alignWith)
-import Data.Functor.Foldable (project, embed)
+import Data.Align                 (alignWith)
+import Data.Functor.Foldable      (embed, project)
+import Data.These                 (These (..))
 
 -- | Generic merge.
 --
diff --git a/src/Data/Aeson/Extra/Recursive.hs b/src/Data/Aeson/Extra/Recursive.hs
--- a/src/Data/Aeson/Extra/Recursive.hs
+++ b/src/Data/Aeson/Extra/Recursive.hs
@@ -27,10 +27,10 @@
     ArrayF,
     ) where
 
-import Prelude        ()
+import Prelude ()
 import Prelude.Compat
 
-import Data.Aeson.Compat
+import Data.Aeson
 import Data.Data             (Data)
 import Data.Functor.Foldable
 import Data.HashMap.Strict   (HashMap)
diff --git a/src/Data/Aeson/Extra/SingObject.hs b/src/Data/Aeson/Extra/SingObject.hs
--- a/src/Data/Aeson/Extra/SingObject.hs
+++ b/src/Data/Aeson/Extra/SingObject.hs
@@ -23,21 +23,15 @@
 import Prelude.Compat
 
 import Control.DeepSeq       (NFData (..))
-import Data.Aeson.Compat
+import Data.Aeson
+import Data.Aeson.Encoding   (pair)
+import Data.Aeson.Internal   (JSONPathElement (Key))
 import Data.Proxy            (Proxy (..))
-import Data.Semigroup.Compat ((<>))
 import Data.Typeable         (Typeable)
 import GHC.TypeLits          (KnownSymbol, Symbol, symbolVal)
 
-import qualified Data.Text as T
-
-#if MIN_VERSION_aeson(1,0,0)
-import Data.Aeson.Encoding (pair)
-import Data.Aeson.Internal (JSONPathElement (Key), (<?>))
-import Data.Aeson.Types    hiding ((.:?))
-
 import qualified Data.HashMap.Strict as HM
-#endif
+import qualified Data.Text           as T
 
 -- | Singleton value object
 --
@@ -57,8 +51,6 @@
 getSingObject :: Proxy s -> SingObject s a -> a
 getSingObject _ (SingObject x) = x
 
-#if MIN_VERSION_aeson(1,0,0)
-
 instance KnownSymbol s => FromJSON1 (SingObject s) where
     liftParseJSON p _ = withObject ("SingObject "<> show key) $ \obj ->
         case HM.lookup key obj of
@@ -83,21 +75,6 @@
 instance (KnownSymbol s, ToJSON a) => ToJSON (SingObject s a) where
     toJSON     = toJSON1
     toEncoding = toEncoding1
-
-#else
-instance (KnownSymbol s, FromJSON a) => FromJSON (SingObject s a) where
-  parseJSON = withObject ("SingObject "<> show key) $ \obj ->
-    SingObject <$> obj .: T.pack key
-    where key = symbolVal (Proxy :: Proxy s)
-
-instance (KnownSymbol s, ToJSON a) => ToJSON (SingObject s a) where
-#if MIN_VERSION_aeson(0,10,0)
-  toEncoding (SingObject x) = pairs (T.pack key .= x)
-    where key = symbolVal (Proxy :: Proxy s)
-#endif
-  toJSON (SingObject x) = object [T.pack key .= x]
-    where key = symbolVal (Proxy :: Proxy s)
-#endif
 
 -- | @since 0.4.1.0
 instance NFData a => NFData (SingObject s a) where
diff --git a/src/Data/Aeson/Extra/Stream.hs b/src/Data/Aeson/Extra/Stream.hs
--- a/src/Data/Aeson/Extra/Stream.hs
+++ b/src/Data/Aeson/Extra/Stream.hs
@@ -10,16 +10,16 @@
     streamDecode,
     ) where
 
-import Prelude        ()
+import Prelude ()
 import Prelude.Compat
 
-import Control.Applicative ((<|>), many)
-import Data.Aeson.Compat   (FromJSON, Result (..), Value, fromJSON)
+import Control.Applicative (many, (<|>))
+import Data.Aeson          (FromJSON, Result (..), Value, fromJSON)
 import Data.Aeson.Parser   (value)
 
-import qualified Data.ByteString.Lazy as LBS
 import qualified Data.Attoparsec.ByteString.Char8 as A8
 import qualified Data.Attoparsec.ByteString.Lazy  as A
+import qualified Data.ByteString.Lazy             as LBS
 
 streamParse :: LBS.ByteString -> ([Value], Maybe String)
 streamParse = start
diff --git a/src/Data/Aeson/Extra/SymTag.hs b/src/Data/Aeson/Extra/SymTag.hs
--- a/src/Data/Aeson/Extra/SymTag.hs
+++ b/src/Data/Aeson/Extra/SymTag.hs
@@ -16,11 +16,11 @@
 import Prelude ()
 import Prelude.Compat
 
-import Control.DeepSeq   (NFData (..))
-import Data.Aeson.Compat
-import Data.Aeson.Types  hiding ((.:?))
-import Data.Proxy        (Proxy (..))
-import GHC.TypeLits      (KnownSymbol, Symbol, symbolVal)
+import Control.DeepSeq  (NFData (..))
+import Data.Aeson
+import Data.Aeson.Types hiding ((.:?))
+import Data.Proxy       (Proxy (..))
+import GHC.TypeLits     (KnownSymbol, Symbol, symbolVal)
 
 import qualified Data.Text as T
 
diff --git a/src/Data/Aeson/Extra/TH.hs b/src/Data/Aeson/Extra/TH.hs
--- a/src/Data/Aeson/Extra/TH.hs
+++ b/src/Data/Aeson/Extra/TH.hs
@@ -15,24 +15,12 @@
     mkValue',
     ) where
 
-import Data.Aeson.Compat
 import Language.Haskell.TH
 
 import qualified Data.Text          as T
 import qualified Data.Text.Encoding as TE
 
-#if !MIN_VERSION_aeson_compat(0,3,5)
-import Data.Aeson.Types (Parser)
-#endif
-
-#if !MIN_VERSION_aeson(0,11,0)
-import Data.Bifunctor             (first)
-import Data.Scientific            (base10Exponent, coefficient, scientific)
-import Language.Haskell.TH.Syntax (Lift (..))
-
-import qualified Data.HashMap.Strict as HM
-import qualified Data.Vector         as V
-#endif
+import Data.Aeson
 
 -- | Create a 'Value' from string representation.
 --
@@ -55,22 +43,3 @@
 mkValue' = mkValue . map f
   where f '\'' = '"'
         f x    = x
-
-#if !MIN_VERSION_aeson(0,11,0)
--- | From 'aeson-extra'
---
--- /Since: aeson-extra-0.3.1.0/
-instance Lift Value where
-    lift Null = [| Null |]
-    lift (Bool b) = [| Bool b |]
-    lift (Number n) = [| Number (scientific c e) |]
-      where
-        c = coefficient n
-        e = base10Exponent n
-    lift (String t) = [| String (T.pack s) |]
-      where s = T.unpack t
-    lift (Array a) = [| Array (V.fromList a') |]
-      where a' = V.toList a
-    lift (Object o) = [| Object (HM.fromList . map (first T.pack) $ o') |]
-      where o' = map (first T.unpack) . HM.toList $ o
-#endif
diff --git a/src/Data/Aeson/Extra/Time.hs b/src/Data/Aeson/Extra/Time.hs
deleted file mode 100644
--- a/src/Data/Aeson/Extra/Time.hs
+++ /dev/null
@@ -1,89 +0,0 @@
-{-# LANGUAGE CPP                #-}
-{-# LANGUAGE DeriveDataTypeable #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Aeson.Extra.Time
--- Copyright   :  (C) 2015-2016 Oleg Grenrus
--- License     :  BSD3
--- Maintainer  :  Oleg Grenrus <oleg.grenrus@iki.fi>
---
--- Time tools
-module Data.Aeson.Extra.Time (
-    U(..),
-    Z(..),
-    )where
-
-import Prelude        ()
-import Prelude.Compat
-
-import Data.Aeson.Compat
-import Data.Time         (UTCTime, ZonedTime)
-import Data.Typeable     (Typeable)
-
-#if !MIN_VERSION_aeson (0,10,0)
-import Data.Text         (Text)
-
-#if !MIN_VERSION_aeson_compat(0,3,5)
-import           Data.Aeson.Types (Parser)
-#endif
-
-import qualified Data.Time.Parsers as TimeParsers
-import qualified Text.Parsec       as Parsec
-#endif
-
--- | A type to parse 'UTCTime'
---
--- 'FromJSON' instance accepts for example:
---
--- @
--- 2015-09-07T08:16:40.807Z
--- 2015-09-07 11:16:40.807 +03:00
--- @
---
--- Latter format is accepted by @aeson@ staring from version @0.10.0.0@.
---
--- See <https://github.com/bos/aeson/blob/4667ef1029a373cf4510f7deca147c357c6d8947/Data/Aeson/Parser/Time.hs#L150>
---
--- /Since: aeson-extra-0.2.2.0/
-newtype U = U { getU :: UTCTime }
-  deriving (Eq, Ord, Show, Read, Typeable)
-
-instance ToJSON U where
-  toJSON = toJSON . getU
-#if MIN_VERSION_aeson (0,10,0)
-  toEncoding = toEncoding . getU
-#endif
-
-instance FromJSON U where
-#if MIN_VERSION_aeson (0,10,0)
-  parseJSON = fmap U . parseJSON
-#else
-  parseJSON = withText "UTCTime" (fmap U . run TimeParsers.utcTime)
-#endif
-
--- | A type to parse 'ZonedTime'
---
--- /Since: aeson-extra-0.2.2.0/
-newtype Z = Z { getZ :: ZonedTime }
-  deriving (Show, Read, Typeable)
-
-instance ToJSON Z where
-  toJSON = toJSON . getZ
-#if MIN_VERSION_aeson (0,10,0)
-  toEncoding = toEncoding . getZ
-#endif
-
-instance FromJSON Z where
-#if MIN_VERSION_aeson (0,10,0)
-  parseJSON = fmap Z . parseJSON
-#else
-  parseJSON = withText "ZonedTime" (fmap Z . run TimeParsers.zonedTime)
-#endif
-
-#if !MIN_VERSION_aeson (0,10,0)
--- | Run a 'parsers' parser as an aeson parser.
-run :: Parsec.Parsec Text () a -> Text -> Parser a
-run p t = case Parsec.parse (p <* Parsec.eof) "" t of
-            Left err -> fail $ "could not parse date: " ++ show err
-            Right r  -> return r
-#endif
diff --git a/test/Tests.hs b/test/Tests.hs
--- a/test/Tests.hs
+++ b/test/Tests.hs
@@ -1,51 +1,34 @@
-{-# LANGUAGE CPP #-}
+{-# LANGUAGE CPP               #-}
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE KindSignatures    #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE KindSignatures #-}
-{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TemplateHaskell   #-}
 {-# OPTIONS_GHC -fno-warn-deprecations #-}
 module Main (main) where
 
-#if !MIN_VERSION_base(4,8,0)
-import           Control.Applicative
-#endif
-
-
-
-import           Data.Map (Map)
-import           Data.Maybe (isJust)
-import           Data.String (fromString)
-import           Data.Time (zonedTimeToUTC, UTCTime(..), Day(..))
-import           Data.Vector (Vector)
-import           Test.QuickCheck.Instances ()
-import           Test.Tasty
-import           Test.Tasty.HUnit
-import           Test.Tasty.QuickCheck
-
-import qualified Data.HashMap.Lazy as H
+import Prelude ()
+import Prelude.Compat
 
-#if MIN_VERSION_base(4,7,0)
-import           Data.Proxy
-#endif
+import Data.Aeson
+import Data.Aeson.Extra
 
-import           Data.Aeson.Extra
-import           Data.Time.TH
+import Data.Maybe                (isJust)
+import Data.Proxy
+import Data.Vector               (Vector)
+import Test.QuickCheck.Instances ()
+import Test.Tasty
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
 
-import           Orphans ()
+import Orphans ()
 
 main :: IO ()
 main = defaultMain $ testGroup "Tests"
   [ dotColonMark
   , encodeStrictTests
-  , mTests
-#if MIN_VERSION_base(4,7,0)
   , symTests
   , singObjectTests
-#endif
   , collapsedListTests
-  , utctimeTests
-  , zonedtimeTests
-  , timeTHTests
   , mergeTests
   , streamTests
   ]
@@ -63,26 +46,6 @@
                  in lhs === rhs
 
 ------------------------------------------------------------------------------
--- M
-------------------------------------------------------------------------------
-
-mTests :: TestTree
-mTests = testGroup "M"
-  [ testCase "decode" $ let lhs = decode "{\"1\": 1, \"2\": 2}" :: Maybe (M (H.HashMap Int Int))
-                            rhs = Just result
-                        in lhs @?= rhs
-  , testProperty "decode . encode" $
-      let prop :: Map Int Int -> Property
-          prop m = let lhs = fmap getMap . decode . encode . M $ m
-                       rhs = Just m
-                   in lhs === rhs
-      in prop
-  ]
-  where result = M $ H.fromList [(1,1),(2,2)]
-
-#if MIN_VERSION_base(4,7,0)
-
-------------------------------------------------------------------------------
 -- SymTag
 ------------------------------------------------------------------------------
 
@@ -114,8 +77,6 @@
       in prop
   ]
 
-#endif
-
 ------------------------------------------------------------------------------
 -- parseCollapsedList
 ------------------------------------------------------------------------------
@@ -206,52 +167,6 @@
         ex2 = "{\"value\": 42 }"
         ex3 = "{\"value\": null }"
         t   = testCase "-"
-
-------------------------------------------------------------------------------
--- U & Z
-------------------------------------------------------------------------------
-
-utctimeTests :: TestTree
-utctimeTests = testGroup "U" $
-  [ testCase "base case" $ assertBool "base case" $ isJust simple
-  ] ++ map t timeStrings
-  where simple = decode "\"2015-09-07T08:16:40.807Z\"" :: Maybe U
-        t str = testCase str
-              . assertEqual str simple
-              . decode
-              . fromString
-              $ "\"" ++ str ++ "\""
-
-zonedtimeTests :: TestTree
-zonedtimeTests = testGroup "Z" $
-  [ testCase "base case" $ assertBool "base case" $ isJust simple
-  ] ++ map t timeStrings
-  where simple = decode "\"2015-09-07T08:16:40.807Z\"" :: Maybe Z
-        t str = testCase str
-              . assertEqual str (fmap z simple)
-              . fmap z
-              . decode
-              . fromString
-              $ "\"" ++ str ++ "\""
-        z (Z z') = zonedTimeToUTC z'
-
-timeStrings :: [String]
-timeStrings =
-  [ "2015-09-07T08:16:40.807Z"
-  , "2015-09-07T11:16:40.807+0300"
-  , "2015-09-07 08:16:40.807Z"
-  , "2015-09-07 08:16:40.807 Z"
-  , "2015-09-07 08:16:40.807 +0000"
-  , "2015-09-07 08:16:40.807 +00:00"
-  , "2015-09-07 11:16:40.807 +03:00"
-  , "2015-09-07 05:16:40.807 -03:00"
-  ]
-
-timeTHTests :: TestTree
-timeTHTests =
-    testCase "time TH example" $ assertBool "should be equal" $ lhs == rhs
-      where lhs = UTCTime (ModifiedJulianDay 56789) 123.456
-            rhs = $(mkUTCTime "2014-05-12 00:02:03.456000Z")
 
 ------------------------------------------------------------------------------
 -- Merge tests
