diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/html-entities.cabal b/html-entities.cabal
--- a/html-entities.cabal
+++ b/html-entities.cabal
@@ -1,62 +1,47 @@
-name:
-  html-entities
-version:
-  1.1.4.5
-synopsis:
-  A codec library for HTML-escaped text and HTML-entities
+cabal-version: 3.0
+
+name: html-entities
+version: 1.1.4.6
+synopsis: A codec library for HTML-escaped text and HTML-entities
 description:
   This library provides the following APIs for coding and decoding of
   HTML-escaped text:
-  .
+  
   * \"attoparsec\" parser
-  .
+  
   * Text decoder
-  .
+  
   * Encoding text builder
-category:
-  Parsing, Codecs, HTML
-homepage:
-  https://github.com/nikita-volkov/html-entities
-bug-reports:
-  https://github.com/nikita-volkov/html-entities/issues
-author:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-maintainer:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-copyright:
-  (c) 2015, Nikita Volkov
-license:
-  MIT
-license-file:
-  LICENSE
-build-type:
-  Simple
-cabal-version:
-  >=1.24
+category: Parsing, Codecs, HTML
+homepage: https://github.com/nikita-volkov/html-entities
+bug-reports: https://github.com/nikita-volkov/html-entities/issues
+author: Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer: Nikita Volkov <nikita.y.volkov@mail.ru>
+copyright: (c) 2015, Nikita Volkov
+license: MIT
+license-file: LICENSE
 
 source-repository head
-  type:
-    git
-  location:
-    git://github.com/nikita-volkov/html-entities.git
+  type: git
+  location: git://github.com/nikita-volkov/html-entities.git
 
+common language-settings
+  default-extensions: BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language: Haskell2010
+
 library
-  hs-source-dirs:
-    library
+  import: language-settings
+  hs-source-dirs: library
   exposed-modules:
-    HTMLEntities.Text
     HTMLEntities.Builder
-    HTMLEntities.Parser
     HTMLEntities.Decoder
+    HTMLEntities.Parser
+    HTMLEntities.Text
   other-modules:
     HTMLEntities.NameTable
     HTMLEntities.Prelude
   build-depends:
-    attoparsec >=0.13 && <0.15,
+    attoparsec >=0.14 && <0.15,
     base >=4.11 && <5,
-    text >=1 && <2,
-    unordered-containers >=0.2 && <0.3
-  default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language:
-    Haskell2010
+    text >=1 && <3,
+    unordered-containers >=0.2 && <0.3,
diff --git a/library/HTMLEntities/Builder.hs b/library/HTMLEntities/Builder.hs
--- a/library/HTMLEntities/Builder.hs
+++ b/library/HTMLEntities/Builder.hs
@@ -1,24 +1,22 @@
 module HTMLEntities.Builder (char, text) where
 
-import HTMLEntities.Prelude
 import qualified Data.Text as Text
 import qualified Data.Text.Lazy.Builder as Text (Builder)
 import qualified Data.Text.Lazy.Builder as Text.Builder
-
+import HTMLEntities.Prelude
 
 -- |
 -- HTML-encodes the given char into a text builder.
 char :: Char -> Text.Builder
 char c =
   fromMaybe (Text.Builder.singleton c) $
-  lookup c entitiesTable
+    lookup c entitiesTable
 
 -- |
 -- HTML-encodes the given text into a text builder.
--- 
+--
 -- >>> Data.Text.Lazy.IO.putStrLn $ Data.Text.Lazy.Builder.toLazyText $ text "<a href=\"\">"
 -- &lt;a href=&quot;&quot;&gt;
--- 
 text :: Text -> Text.Builder
 text =
   Text.foldr (\c b -> char c <> b) mempty
@@ -26,8 +24,7 @@
 {-# NOINLINE entitiesTable #-}
 entitiesTable :: [(Char, Text.Builder)]
 entitiesTable =
-  [
-    ('<', "&lt;"),
+  [ ('<', "&lt;"),
     ('>', "&gt;"),
     ('&', "&amp;"),
     ('"', "&quot;"),
diff --git a/library/HTMLEntities/Decoder.hs b/library/HTMLEntities/Decoder.hs
--- a/library/HTMLEntities/Decoder.hs
+++ b/library/HTMLEntities/Decoder.hs
@@ -2,47 +2,45 @@
 -- Utilities, which execute the parser.
 module HTMLEntities.Decoder where
 
-import HTMLEntities.Prelude
-import qualified Data.Text.Lazy.Builder as TLB
 import qualified Data.Attoparsec.Text as P
+import qualified Data.Text.Lazy.Builder as TLB
 import qualified HTMLEntities.Parser as P
-
+import HTMLEntities.Prelude
 
 -- |
 -- A decoder of a single entity.
--- 
+--
 -- >>> mapM_ Data.Text.IO.putStrLn $ htmlEntity "&#169;"
 -- ©
 htmlEntity :: Text -> Either String Text
 htmlEntity =
   P.parseOnly $
-  P.htmlEntity <* P.endOfInput
+    P.htmlEntity <* P.endOfInput
 
 -- |
 -- A decoder of a single entity.
--- 
+--
 -- >>> mapM_ Data.Text.IO.putStrLn $ htmlEntityBody "#169"
 -- ©
 htmlEntityBody :: Text -> Either String Text
 htmlEntityBody =
   P.parseOnly $
-  P.htmlEntityBody <* P.endOfInput
+    P.htmlEntityBody <* P.endOfInput
 
 -- |
 -- A decoder of a text with entities.
--- 
--- Produces a text builder, 
+--
+-- Produces a text builder,
 -- which you can then convert into a text or a lazy text,
--- using the <http://hackage.haskell.org/package/text "text"> or 
+-- using the <http://hackage.haskell.org/package/text "text"> or
 -- <http://hackage.haskell.org/package/conversion-text "conversion-text"> library.
--- 
+--
 -- >>> Data.Text.Lazy.IO.putStrLn $ Data.Text.Lazy.Builder.toLazyText $ htmlEncodedText "&euro;5 &cent;2"
 -- €5 ¢2
 htmlEncodedText :: Text -> TLB.Builder
 htmlEncodedText =
   fmap (either (error "HTMLEntities.Decoder: impossible happened") id) $
-  P.parseOnly $
-  fmap fold $
-  many $
-  fmap TLB.fromText P.htmlEntity <|> fmap TLB.singleton P.anyChar
-
+    P.parseOnly $
+      fmap fold $
+        many $
+          fmap TLB.fromText P.htmlEntity <|> fmap TLB.singleton P.anyChar
diff --git a/library/HTMLEntities/NameTable.hs b/library/HTMLEntities/NameTable.hs
--- a/library/HTMLEntities/NameTable.hs
+++ b/library/HTMLEntities/NameTable.hs
@@ -2,24 +2,22 @@
 -- A named entities table as per
 -- <https://html.spec.whatwg.org/multipage/entities.json>.
 module HTMLEntities.NameTable
-(
-  lookupTextByName,
-  lookupNameByText,
-)
+  ( lookupTextByName,
+    lookupNameByText,
+  )
 where
 
-import HTMLEntities.Prelude
 import qualified Data.HashMap.Strict as HM
-
+import HTMLEntities.Prelude
 
 {-# INLINE lookupTextByName #-}
 lookupTextByName :: Text -> Maybe Text
-lookupTextByName k = 
+lookupTextByName k =
   HM.lookup k textByNameTable
 
 {-# INLINE lookupNameByText #-}
 lookupNameByText :: Text -> Maybe Text
-lookupNameByText k = 
+lookupNameByText k =
   HM.lookup k nameByTextTable
 
 {-# NOINLINE textByNameTable #-}
@@ -35,8 +33,7 @@
 {-# INLINE list #-}
 list :: [(Text, Text)]
 list =
-  [
-    ("Aacute", "\x00C1"),
+  [ ("Aacute", "\x00C1"),
     ("Aacute", "\x00C1"),
     ("aacute", "\x00E1"),
     ("aacute", "\x00E1"),
diff --git a/library/HTMLEntities/Parser.hs b/library/HTMLEntities/Parser.hs
--- a/library/HTMLEntities/Parser.hs
+++ b/library/HTMLEntities/Parser.hs
@@ -2,25 +2,23 @@
 -- Attoparsec parsers.
 module HTMLEntities.Parser where
 
-import HTMLEntities.Prelude
 import Data.Attoparsec.Text
 import qualified Data.Text as Text
 import qualified HTMLEntities.NameTable as NameTable
-
+import HTMLEntities.Prelude
 
 -- |
 -- A parser of a single entity.
--- 
+--
 -- Parses numeric encoding:
--- 
+--
 -- >>> mapM_ Data.Text.IO.putStrLn $ Data.Attoparsec.Text.parseOnly htmlEntity "&#169;"
 -- ©
--- 
+--
 -- as well as the named entities:
--- 
+--
 -- >>> mapM_ Data.Text.IO.putStrLn $ Data.Attoparsec.Text.parseOnly htmlEntity "&copy;"
 -- ©
--- 
 {-# INLINE htmlEntity #-}
 htmlEntity :: Parser Text
 htmlEntity =
@@ -28,18 +26,17 @@
 
 -- |
 -- A parser of the body of a single entity.
--- 
+--
 -- Parses numeric encoding:
--- 
+--
 -- >>> mapM_ Data.Text.IO.putStrLn $ Data.Attoparsec.Text.parseOnly htmlEntityBody "#169"
 -- ©
--- 
+--
 -- as well as the named entities:
--- 
+--
 -- >>> mapM_ Data.Text.IO.putStrLn $ Data.Attoparsec.Text.parseOnly htmlEntityBody "copy"
 -- ©
--- 
-{-# INLINABLE htmlEntityBody #-}
+{-# INLINEABLE htmlEntityBody #-}
 htmlEntityBody :: Parser Text
 htmlEntityBody =
   numeric <|> named
diff --git a/library/HTMLEntities/Prelude.hs b/library/HTMLEntities/Prelude.hs
--- a/library/HTMLEntities/Prelude.hs
+++ b/library/HTMLEntities/Prelude.hs
@@ -1,20 +1,17 @@
 module HTMLEntities.Prelude
-(
-  module Exports,
-)
+  ( module Exports,
+  )
 where
 
--- base
--------------------------
-import Control.Applicative as Exports hiding (WrappedArrow(..))
+import Control.Applicative as Exports hiding (WrappedArrow (..))
 import Control.Arrow as Exports hiding (first, second)
 import Control.Category as Exports
 import Control.Concurrent as Exports
 import Control.Exception as Exports
-import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM)
-import Control.Monad.IO.Class as Exports
+import Control.Monad as Exports hiding (fail, forM, forM_, mapM, mapM_, msum, sequence, sequence_)
 import Control.Monad.Fail as Exports
 import Control.Monad.Fix as Exports hiding (fix)
+import Control.Monad.IO.Class as Exports
 import Control.Monad.ST as Exports
 import Data.Bifunctor as Exports
 import Data.Bits as Exports
@@ -30,19 +27,20 @@
 import Data.Function as Exports hiding (id, (.))
 import Data.Functor as Exports
 import Data.Functor.Compose as Exports
-import Data.Int as Exports
 import Data.IORef as Exports
+import Data.Int as Exports
 import Data.Ix as Exports
-import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')
-import Data.List.NonEmpty as Exports (NonEmpty(..))
+import Data.List as Exports hiding (all, and, any, concat, concatMap, elem, find, foldl, foldl', foldl1, foldr, foldr1, isSubsequenceOf, mapAccumL, mapAccumR, maximum, maximumBy, minimum, minimumBy, notElem, or, product, sortOn, sum, uncons)
+import Data.List.NonEmpty as Exports (NonEmpty (..))
 import Data.Maybe as Exports
 import Data.Monoid as Exports hiding (Alt, (<>))
 import Data.Ord as Exports
 import Data.Proxy as Exports
 import Data.Ratio as Exports
-import Data.Semigroup as Exports hiding (First(..), Last(..))
 import Data.STRef as Exports
+import Data.Semigroup as Exports hiding (First (..), Last (..))
 import Data.String as Exports
+import Data.Text as Exports (Text)
 import Data.Traversable as Exports
 import Data.Tuple as Exports
 import Data.Unique as Exports
@@ -54,13 +52,12 @@
 import Foreign.Ptr as Exports
 import Foreign.StablePtr as Exports
 import Foreign.Storable as Exports
-import GHC.Conc as Exports hiding (orElse, withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead)
-import GHC.Exts as Exports (IsList(..), lazy, inline, sortWith, groupWith)
+import GHC.Conc as Exports hiding (orElse, threadWaitRead, threadWaitReadSTM, threadWaitWrite, threadWaitWriteSTM, withMVar)
+import GHC.Exts as Exports (IsList (..), groupWith, inline, lazy, sortWith)
 import GHC.Generics as Exports (Generic)
 import GHC.IO.Exception as Exports
 import GHC.OverloadedLabels as Exports
 import Numeric as Exports
-import Prelude as Exports hiding (Read, fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.))
 import System.Environment as Exports
 import System.Exit as Exports
 import System.IO as Exports (Handle, hClose)
@@ -70,10 +67,7 @@
 import System.Mem.StableName as Exports
 import System.Timeout as Exports
 import Text.ParserCombinators.ReadP as Exports (ReadP, readP_to_S, readS_to_P)
-import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec)
-import Text.Printf as Exports (printf, hPrintf)
+import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readP_to_Prec, readPrec_to_P, readPrec_to_S, readS_to_Prec)
+import Text.Printf as Exports (hPrintf, printf)
 import Unsafe.Coerce as Exports
-
--- text
--------------------------
-import Data.Text as Exports (Text)
+import Prelude as Exports hiding (Read, all, and, any, concat, concatMap, elem, fail, foldl, foldl1, foldr, foldr1, id, mapM, mapM_, maximum, minimum, notElem, or, product, sequence, sequence_, sum, (.))
diff --git a/library/HTMLEntities/Text.hs b/library/HTMLEntities/Text.hs
--- a/library/HTMLEntities/Text.hs
+++ b/library/HTMLEntities/Text.hs
@@ -1,8 +1,7 @@
 module HTMLEntities.Text where
 
-import HTMLEntities.Prelude
 import qualified Data.Text as Text
-
+import HTMLEntities.Prelude
 
 -- |
 -- HTML-encodes the given char.
@@ -18,10 +17,9 @@
 
 -- |
 -- HTML-encodes the given text.
--- 
+--
 -- >>> Data.Text.IO.putStrLn $ text "<a href=\"\">"
 -- &lt;a href=&quot;&quot;&gt;
--- 
 text :: Text -> Text
 text =
   Text.concatMap char
