diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,11 @@
 
 # Changelog by versions
 
+## 3.22.4.2
+* Drop support for `base < 4.14`.
+* Support `hashable-1.5.0.0`.
+* Remove uses of CPP.
+
 ## 3.22.4.1
 * QuickCheck instance fix.
 
diff --git a/HaTeX.cabal b/HaTeX.cabal
--- a/HaTeX.cabal
+++ b/HaTeX.cabal
@@ -1,5 +1,5 @@
 name: HaTeX
-version: 3.22.4.1
+version: 3.22.4.2
 category: LaTeX
 build-type: Simple
 license: BSD3
@@ -50,12 +50,12 @@
 
 library
   default-language: Haskell2010
-  build-depends: base == 4.*
+  build-depends: base >= 4.14 && < 5
                , bytestring >= 0.9.2.1 && < 0.13
                , text >= 0.11.2.3 && < 2.2
                , transformers >= 0.2.2 && < 0.7
                , containers >= 0.4.2.1 && < 0.7
-               , hashable >= 1.2 && < 1.5
+               , hashable >= 1.2 && < 1.6
                , bibtex >= 0.1 && < 0.2
                , matrix
                  -- Testing
diff --git a/Text/LaTeX/Base/Math.hs b/Text/LaTeX/Base/Math.hs
--- a/Text/LaTeX/Base/Math.hs
+++ b/Text/LaTeX/Base/Math.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE CPP               #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 
 -- | This module contains the maths-specific part of "Text.LaTeX.Base.Commands",
@@ -146,7 +145,6 @@
 import Text.LaTeX.Base.Writer
 import Text.LaTeX.Base.Render
 
-
 -- | Inline mathematical expressions.
 math :: LaTeXC l => l -> l
 math = liftL $ TeXMath Dollar
@@ -201,20 +199,6 @@
  acosh = (operatorname "arcosh" <>)
 
 ----------- LaTeXT instances
-
-#if !MIN_VERSION_base(4,5,0)
-
--- | Warning: this instance only exists for the 'Num' instance.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance Eq (LaTeXT m a) where
- _ == _ = error "Cannot use \"(==)\" Eq method with a LaTeXT value."
-
--- | Warning: this instance only exists for the 'Num' instance.
---   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
-instance Show (LaTeXT m a) where
- show _ = error "Cannot use \"show\" Show method with a LaTeXT value."
-
-#endif
 
 -- | Careful! Method 'signum' is undefined. Don't use it!
 --   This instance is defined in the "Text.LaTeX.Packages.AMSMath" module.
diff --git a/Text/LaTeX/Base/Syntax.hs b/Text/LaTeX/Base/Syntax.hs
--- a/Text/LaTeX/Base/Syntax.hs
+++ b/Text/LaTeX/Base/Syntax.hs
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE CPP, DeriveDataTypeable, DeriveGeneric #-}
+{-# LANGUAGE DeriveDataTypeable, DeriveGeneric #-}
 
 -- | LaTeX syntax description in the definition of the 'LaTeX' datatype.
 --   If you want to add new commands or environments not defined in
@@ -30,7 +30,6 @@
 import qualified Data.Text
 import qualified Data.Semigroup as Semigroup
 import Data.String
-import Control.Applicative
 import Control.Monad (replicateM)
 import Data.Functor.Identity (runIdentity)
 import Data.Data (Data)
@@ -38,9 +37,7 @@
 import Test.QuickCheck
 import Data.Hashable
 import GHC.Generics (Generic)
-#if !MIN_VERSION_base(4,11,0)
-import Data.Monoid
-#endif
+import Control.Applicative (liftA2)
 
 -- | Measure units defined in LaTeX. Use 'CustomMeasure' to use commands like 'textwidth'.
 --   For instance:
diff --git a/Text/LaTeX/Base/Writer.hs b/Text/LaTeX/Base/Writer.hs
--- a/Text/LaTeX/Base/Writer.hs
+++ b/Text/LaTeX/Base/Writer.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, CPP #-}
+{-# LANGUAGE TypeFamilies #-}
 
 -- | The writer monad applied to 'LaTeX' values. Useful to compose 'LaTeX' values
 --   using the @do@ notation:
@@ -55,11 +55,8 @@
 
 -- base
 import Control.Arrow
+import Control.Applicative (liftA2)
 import Data.String
-#if !MIN_VERSION_base(4,8,0)
-import Data.Monoid
-#endif
-import Control.Applicative
 import qualified Data.Semigroup as Semigroup
 -- transformers
 import Control.Monad.Trans.Writer
diff --git a/Text/LaTeX/Packages/BibLaTeX.hs b/Text/LaTeX/Packages/BibLaTeX.hs
--- a/Text/LaTeX/Packages/BibLaTeX.hs
+++ b/Text/LaTeX/Packages/BibLaTeX.hs
@@ -41,7 +41,7 @@
 
 import qualified Data.List as List
 
-import Control.Applicative
+import Control.Applicative (liftA2)
 import Control.Monad (forM)
 import Control.Monad.IO.Class
 
diff --git a/Text/LaTeX/Packages/TikZ/PathBuilder.hs b/Text/LaTeX/Packages/TikZ/PathBuilder.hs
--- a/Text/LaTeX/Packages/TikZ/PathBuilder.hs
+++ b/Text/LaTeX/Packages/TikZ/PathBuilder.hs
@@ -40,9 +40,6 @@
 import Text.LaTeX.Base.Syntax (LaTeX)
 import Text.LaTeX.Packages.TikZ.Syntax
 import Control.Monad.Trans.State
-#if !MIN_VERSION_base(4,8,0)
-import Control.Applicative
-#endif
 
 newtype PathState = PS { currentPath :: TPath }
 
diff --git a/Text/LaTeX/Packages/Trees.hs b/Text/LaTeX/Packages/Trees.hs
--- a/Text/LaTeX/Packages/Trees.hs
+++ b/Text/LaTeX/Packages/Trees.hs
@@ -1,18 +1,11 @@
 
-{-# LANGUAGE CPP #-}
-
 -- | Tree definition with some class instances.
 module Text.LaTeX.Packages.Trees (
    -- * Tree
    Tree (..)
  ) where
 
-#if !MIN_VERSION_base(4,8,0)
-import Data.Monoid
-import Data.Foldable
-import Data.Traversable
-#endif
-import Control.Applicative
+import Control.Applicative (liftA2)
 
 -- | Tree datatype.
 data Tree a =
