diff --git a/doctest/Main.hs b/doctest/Main.hs
--- a/doctest/Main.hs
+++ b/doctest/Main.hs
@@ -23,15 +23,16 @@
         "-XDataKinds",
         "-XDefaultSignatures",
         "-XDeriveDataTypeable",
+        "-XDeriveFoldable",
         "-XDeriveFunctor",
         "-XDeriveGeneric",
+        "-XDeriveTraversable",
         "-XEmptyDataDecls",
         "-XFlexibleContexts",
         "-XFlexibleInstances",
         "-XFunctionalDependencies",
         "-XGADTs",
         "-XGeneralizedNewtypeDeriving",
-        "-XImpredicativeTypes",
         "-XLambdaCase",
         "-XLiberalTypeSynonyms",
         "-XMultiParamTypeClasses",
diff --git a/html-entities.cabal b/html-entities.cabal
--- a/html-entities.cabal
+++ b/html-entities.cabal
@@ -1,7 +1,7 @@
 name:
   html-entities
 version:
-  1.1.1.1
+  1.1.2
 synopsis:
   A codec library for HTML-escaped text and HTML-entities
 description:
@@ -49,6 +49,7 @@
     HTMLEntities.NameTable
     HTMLEntities.Prelude
   exposed-modules:
+    HTMLEntities.Text
     HTMLEntities.Builder
     HTMLEntities.Parser
     HTMLEntities.Decoder
@@ -60,7 +61,7 @@
   ghc-options:
     -funbox-strict-fields
   default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators
   default-language:
     Haskell2010
 
@@ -77,11 +78,11 @@
     "-with-rtsopts=-N"
     -funbox-strict-fields
   default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators
   default-language:
     Haskell2010
   build-depends:
-    doctest == 0.10.*,
+    doctest == 0.11.*,
     directory == 1.2.*,
     filepath >= 1.3 && < 1.5,
     base-prelude,
diff --git a/library/HTMLEntities/Text.hs b/library/HTMLEntities/Text.hs
new file mode 100644
--- /dev/null
+++ b/library/HTMLEntities/Text.hs
@@ -0,0 +1,27 @@
+module HTMLEntities.Text where
+
+import HTMLEntities.Prelude
+import qualified Data.Text as Text
+
+
+-- |
+-- HTML-encodes the given char.
+char :: Char -> Text
+char =
+  \case
+    '<' -> "&lt;"
+    '>' -> "&gt;"
+    '&' -> "&amp;"
+    '"' -> "&quot;"
+    '\'' -> "&#39;"
+    x -> Text.singleton x
+
+-- |
+-- 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
