diff --git a/src/Text/LDAP/Printer.hs b/src/Text/LDAP/Printer.hs
--- a/src/Text/LDAP/Printer.hs
+++ b/src/Text/LDAP/Printer.hs
@@ -23,14 +23,14 @@
        ) where
 
 import Prelude hiding (reverse)
-import Data.DList (DList, toList)
+import Data.Monoid (Endo (..))
 import Data.List.NonEmpty (NonEmpty ((:|)))
 import Data.Char (chr, isAscii, isPrint)
 import Data.Word (Word8)
 import qualified Data.ByteString as BS
 import Data.ByteString.Char8 (ByteString, singleton)
 import qualified Data.ByteString.Lazy as LB
-import Control.Applicative (pure, (<*))
+import Control.Applicative ((<*))
 import Control.Monad.Trans.Writer (Writer, tell, execWriter)
 import Text.Printf (printf)
 import Data.ByteArray.Encoding (Base (Base64), convertToBase)
@@ -46,17 +46,17 @@
 
 
 -- | Printer context type for LDAP data stream
-type LdapPutM = Writer (DList ByteString)
+type LdapPutM = Writer (Endo [ByteString])
 
 -- | 'LdapPrinter' 'a' print type 'a' into context
 type LdapPrinter a = a -> LdapPutM ()
 
 -- | Run 'LdapPrinter'
 runLdapPrinter :: LdapPrinter a -> a -> LB.ByteString
-runLdapPrinter p = LB.fromChunks . toList . execWriter . p
+runLdapPrinter p = LB.fromChunks . (`appEndo` []) . execWriter . p
 
 string :: LdapPrinter ByteString
-string =  tell . pure
+string =  tell . Endo . (:)
 
 bslash :: Word8
 bslash =  ordW8 '\\'
diff --git a/text-ldap.cabal b/text-ldap.cabal
--- a/text-ldap.cabal
+++ b/text-ldap.cabal
@@ -1,5 +1,5 @@
 name:                text-ldap
-version:             0.1.1.13
+version:             0.1.1.14
 synopsis:            Parser and Printer for LDAP text data stream
 description:         This package contains Parser and Printer for
                      LDAP text data stream like OpenLDAP backup LDIF.
@@ -7,11 +7,15 @@
 license-file:        LICENSE
 author:              Kei Hibino
 maintainer:          ex8k.hibino@gmail.com
-copyright:           Copyright (c) 2014-2018 Kei Hibino
+copyright:           Copyright (c) 2014-2021 Kei Hibino
 category:            Text
 build-type:          Simple
-cabal-version:       >=1.8
-tested-with:           GHC == 8.4.1, GHC == 8.4.2, GHC == 8.4.3
+cabal-version:       >=1.10
+tested-with:           GHC == 9.0.1
+                     , GHC == 8.10.1, GHC == 8.10.2, GHC == 8.10.3, GHC == 8.10.4
+                     , GHC == 8.8.1, GHC == 8.8.2, GHC == 8.8.3, GHC == 8.8.4
+                     , GHC == 8.6.1, GHC == 8.6.2, GHC == 8.6.3, GHC == 8.6.4, GHC == 8.6.5
+                     , GHC == 8.4.1, GHC == 8.4.2, GHC == 8.4.3, GHC == 8.4.4
                      , GHC == 8.2.1, GHC == 8.2.2
                      , GHC == 8.0.1, GHC == 8.0.2
                      , GHC == 7.10.1, GHC == 7.10.2, GHC == 7.10.3
@@ -32,7 +36,6 @@
                        , containers
                        , transformers
                        , attoparsec
-                       , dlist
                        , memory
   if impl(ghc < 8)
     build-depends:       semigroups
@@ -40,7 +43,7 @@
   hs-source-dirs:        src
   ghc-options:         -Wall
   -- ghc-prof-options:    -prof -fprof-auto
-
+  default-language:    Haskell2010
 
 executable parseTest
   main-is:             parseTest.hs
@@ -50,6 +53,7 @@
   hs-source-dirs:      mains
   ghc-options:         -Wall -rtsopts
   -- ghc-prof-options:    -prof -fprof-auto
+  default-language:    Haskell2010
 
 Test-suite pp
   build-depends:         base <5
@@ -65,6 +69,7 @@
   main-is:             printParse.hs
   hs-source-dirs:      test
   ghc-options:         -Wall
+  default-language:    Haskell2010
 
 source-repository head
   type:       git
