diff --git a/hxt.cabal b/hxt.cabal
--- a/hxt.cabal
+++ b/hxt.cabal
@@ -1,6 +1,6 @@
 -- arch-tag: Haskell XML Toolbox main description file
 Name:           hxt
-Version:        9.3.1.21
+Version:        9.3.1.22
 Synopsis:       A collection of tools for processing XML with Haskell.
 Description:    The Haskell XML Toolbox bases on the ideas of HaXml and HXML,
                 but introduces a more general approach for processing XML with Haskell.
@@ -16,6 +16,8 @@
                 hxt-regex-xmlschema contain the extensions.
                 hxt-unicode contains encoding and decoding functions,
                 hxt-charproperties char properties for unicode and XML.
+                Changes from 9.3.1.21: ghc-9.0 compatibility
+                .
                 Changes from 9.3.1.20: ghc 8.10 and 9.0 compatibility, tuple picker up to 24-tuples, Either instance for xpickle
                 .
                 Changes from 9.3.1.19: ghc-8.8.2 compatibility
diff --git a/src/Text/XML/HXT/Arrow/XmlState/TypeDefs.hs b/src/Text/XML/HXT/Arrow/XmlState/TypeDefs.hs
--- a/src/Text/XML/HXT/Arrow/XmlState/TypeDefs.hs
+++ b/src/Text/XML/HXT/Arrow/XmlState/TypeDefs.hs
@@ -59,8 +59,8 @@
 -- state datatype consists of a system state and a user state
 -- the user state is not fixed
 
-data XIOState us        = XIOState { xioSysState  :: ! XIOSysState
-                                   , xioUserState :: ! us
+data XIOState us        = XIOState { xioSysState  :: !XIOSysState
+                                   , xioUserState :: !us
                                    }
 
 instance (NFData us) => NFData (XIOState us) where
@@ -152,103 +152,103 @@
 -- predefined system state data type with all components for the
 -- system functions, like trace, error handling, ...
 
-data XIOSysState        = XIOSys  { xioSysWriter :: ! XIOSysWriter
-                                  , xioSysEnv    :: ! XIOSysEnv
+data XIOSysState        = XIOSys  { xioSysWriter :: !XIOSysWriter
+                                  , xioSysEnv    :: !XIOSysEnv
                                   }
 
 instance NFData XIOSysState where
     rnf x = seq x ()    -- all fields of interest are strict
 
-data XIOSysWriter       = XIOwrt  { xioErrorStatus     :: ! Int
-                                  , xioErrorMsgList    :: ! XmlTrees
-                                  , xioExpatErrors     ::   IOSArrow XmlTree XmlTree
-                                  , xioRelaxNoOfErrors :: ! Int
-                                  , xioRelaxDefineId   :: ! Int
-                                  , xioRelaxAttrList   ::   AssocList String XmlTrees
+data XIOSysWriter       = XIOwrt  { xioErrorStatus     :: !Int
+                                  , xioErrorMsgList    :: !XmlTrees
+                                  , xioExpatErrors     ::  IOSArrow XmlTree XmlTree
+                                  , xioRelaxNoOfErrors :: !Int
+                                  , xioRelaxDefineId   :: !Int
+                                  , xioRelaxAttrList   ::  AssocList String XmlTrees
                                   }
 
-data XIOSysEnv          = XIOEnv  { xioTraceLevel      :: ! Int
-                                  , xioTraceCmd        ::   Int -> String -> IO ()
-                                  , xioErrorMsgHandler ::   String -> IO ()
-                                  , xioErrorMsgCollect :: ! Bool
-                                  , xioBaseURI         :: ! String
-                                  , xioDefaultBaseURI  :: ! String
-                                  , xioAttrList        :: ! Attributes
-                                  , xioInputConfig     :: ! XIOInputConfig
-                                  , xioParseConfig     :: ! XIOParseConfig
-                                  , xioOutputConfig    :: ! XIOOutputConfig
-                                  , xioRelaxConfig     :: ! XIORelaxConfig
-                                  , xioXmlSchemaConfig :: ! XIOXmlSchemaConfig
-                                  , xioCacheConfig     :: ! XIOCacheConfig
+data XIOSysEnv          = XIOEnv  { xioTraceLevel      :: !Int
+                                  , xioTraceCmd        ::  Int -> String -> IO ()
+                                  , xioErrorMsgHandler ::  String -> IO ()
+                                  , xioErrorMsgCollect :: !Bool
+                                  , xioBaseURI         :: !String
+                                  , xioDefaultBaseURI  :: !String
+                                  , xioAttrList        :: !Attributes
+                                  , xioInputConfig     :: !XIOInputConfig
+                                  , xioParseConfig     :: !XIOParseConfig
+                                  , xioOutputConfig    :: !XIOOutputConfig
+                                  , xioRelaxConfig     :: !XIORelaxConfig
+                                  , xioXmlSchemaConfig :: !XIOXmlSchemaConfig
+                                  , xioCacheConfig     :: !XIOCacheConfig
                                   }
 
-data XIOInputConfig     = XIOIcgf { xioStrictInput    :: ! Bool
-                                  , xioEncodingErrors :: ! Bool
-                                  , xioInputEncoding  ::   String
-                                  , xioHttpHandler    ::   IOSArrow XmlTree XmlTree
-                                  , xioInputOptions   :: ! Attributes
-                                  , xioRedirect       :: ! Bool
-                                  , xioProxy          ::   String
+data XIOInputConfig     = XIOIcgf { xioStrictInput    :: !Bool
+                                  , xioEncodingErrors :: !Bool
+                                  , xioInputEncoding  ::  String
+                                  , xioHttpHandler    ::  IOSArrow XmlTree XmlTree
+                                  , xioInputOptions   :: !Attributes
+                                  , xioRedirect       :: !Bool
+                                  , xioProxy          ::  String
                                   }
 
-data XIOParseConfig     = XIOPcfg { xioMimeTypes             ::   MimeTypeTable
-                                  , xioMimeTypeHandlers      ::   MimeTypeHandlers
-                                  , xioMimeTypeFile          ::   String
-                                  , xioAcceptedMimeTypes     ::   [String]
-                                  , xioFileMimeType          ::   String
-                                  , xioWarnings              :: ! Bool
-                                  , xioRemoveWS              :: ! Bool
-                                  , xioParseByMimeType       :: ! Bool
-                                  , xioParseHTML             :: ! Bool
-                                  , xioLowerCaseNames        :: ! Bool
-                                  , xioPreserveComment       :: ! Bool
-                                  , xioValidate              :: ! Bool
-                                  , xioSubstDTDEntities      :: ! Bool
-                                  , xioSubstHTMLEntities     :: ! Bool
-                                  , xioCheckNamespaces       :: ! Bool
-                                  , xioCanonicalize          :: ! Bool
-                                  , xioIgnoreNoneXmlContents :: ! Bool
-                                  , xioTagSoup               :: ! Bool
-                                  , xioTagSoupParser         ::   IOSArrow XmlTree XmlTree
-                                  , xioExpat                 :: ! Bool
-                                  , xioExpatParser           ::   IOSArrow XmlTree XmlTree
+data XIOParseConfig     = XIOPcfg { xioMimeTypes             ::  MimeTypeTable
+                                  , xioMimeTypeHandlers      ::  MimeTypeHandlers
+                                  , xioMimeTypeFile          ::  String
+                                  , xioAcceptedMimeTypes     ::  [String]
+                                  , xioFileMimeType          ::  String
+                                  , xioWarnings              :: !Bool
+                                  , xioRemoveWS              :: !Bool
+                                  , xioParseByMimeType       :: !Bool
+                                  , xioParseHTML             :: !Bool
+                                  , xioLowerCaseNames        :: !Bool
+                                  , xioPreserveComment       :: !Bool
+                                  , xioValidate              :: !Bool
+                                  , xioSubstDTDEntities      :: !Bool
+                                  , xioSubstHTMLEntities     :: !Bool
+                                  , xioCheckNamespaces       :: !Bool
+                                  , xioCanonicalize          :: !Bool
+                                  , xioIgnoreNoneXmlContents :: !Bool
+                                  , xioTagSoup               :: !Bool
+                                  , xioTagSoupParser         ::  IOSArrow XmlTree XmlTree
+                                  , xioExpat                 :: !Bool
+                                  , xioExpatParser           ::  IOSArrow XmlTree XmlTree
                                   }
 
-data XIOOutputConfig    = XIOOcfg { xioIndent         :: ! Bool
-                                  , xioOutputEncoding :: ! String
-                                  , xioOutputFmt      :: ! XIOXoutConfig
-                                  , xioXmlPi          :: ! Bool
-                                  , xioNoEmptyElemFor :: ! [String]
-                                  , xioAddDefaultDTD  :: ! Bool
-                                  , xioTextMode       :: ! Bool
-                                  , xioShowTree       :: ! Bool
-                                  , xioShowHaskell    :: ! Bool
+data XIOOutputConfig    = XIOOcfg { xioIndent         :: !Bool
+                                  , xioOutputEncoding :: !String
+                                  , xioOutputFmt      :: !XIOXoutConfig
+                                  , xioXmlPi          :: !Bool
+                                  , xioNoEmptyElemFor :: ![String]
+                                  , xioAddDefaultDTD  :: !Bool
+                                  , xioTextMode       :: !Bool
+                                  , xioShowTree       :: !Bool
+                                  , xioShowHaskell    :: !Bool
                                   }
 data XIOXoutConfig      = XMLoutput | XHTMLoutput | HTMLoutput | PLAINoutput
                           deriving (Eq)
 
-data XIORelaxConfig     = XIORxc  { xioRelaxValidate        :: ! Bool
-                                  , xioRelaxSchema          ::   String
-                                  , xioRelaxCheckRestr      :: ! Bool
-                                  , xioRelaxValidateExtRef  :: ! Bool
-                                  , xioRelaxValidateInclude :: ! Bool
-                                  , xioRelaxCollectErrors   :: ! Bool
-                                  , xioRelaxValidator       ::   IOSArrow XmlTree XmlTree
+data XIORelaxConfig     = XIORxc  { xioRelaxValidate        :: !Bool
+                                  , xioRelaxSchema          ::  String
+                                  , xioRelaxCheckRestr      :: !Bool
+                                  , xioRelaxValidateExtRef  :: !Bool
+                                  , xioRelaxValidateInclude :: !Bool
+                                  , xioRelaxCollectErrors   :: !Bool
+                                  , xioRelaxValidator       ::  IOSArrow XmlTree XmlTree
                                   }
 
-data XIOXmlSchemaConfig = XIOScc  { xioXmlSchemaValidate  :: ! Bool
-                                  , xioXmlSchemaSchema    ::   String
-                                  , xioXmlSchemaValidator ::   IOSArrow XmlTree XmlTree
+data XIOXmlSchemaConfig = XIOScc  { xioXmlSchemaValidate  :: !Bool
+                                  , xioXmlSchemaSchema    ::  String
+                                  , xioXmlSchemaValidator ::  IOSArrow XmlTree XmlTree
                                   }
 
-data XIOCacheConfig     = XIOCch  { xioBinaryCompression   ::   CompressionFct
-                                  , xioBinaryDeCompression ::   DeCompressionFct
-                                  , xioWithCache           :: ! Bool
-                                  , xioCacheDir            :: ! String
-                                  , xioDocumentAge         :: ! Int
-                                  , xioCache404Err         :: ! Bool
-                                  , xioCacheRead           ::   String -> IOSArrow XmlTree XmlTree
-                                  , xioStrictDeserialize   :: ! Bool
+data XIOCacheConfig     = XIOCch  { xioBinaryCompression   ::  CompressionFct
+                                  , xioBinaryDeCompression ::  DeCompressionFct
+                                  , xioWithCache           :: !Bool
+                                  , xioCacheDir            :: !String
+                                  , xioDocumentAge         :: !Int
+                                  , xioCache404Err         :: !Bool
+                                  , xioCacheRead           ::  String -> IOSArrow XmlTree XmlTree
+                                  , xioStrictDeserialize   :: !Bool
                                   }
 
 type MimeTypeHandlers   = M.Map String (IOSArrow XmlTree XmlTree)
diff --git a/src/Text/XML/HXT/DOM/QualifiedName.hs b/src/Text/XML/HXT/DOM/QualifiedName.hs
--- a/src/Text/XML/HXT/DOM/QualifiedName.hs
+++ b/src/Text/XML/HXT/DOM/QualifiedName.hs
@@ -110,7 +110,7 @@
 -- Names are always reduced to normal form, and they are stored internally in a name cache
 -- for sharing equal names by the same data structure
 
-data XName                      = XN { _idXN :: ! Int        -- for optimization of equality test, see Eq instance
+data XName                      = XN { _idXN :: !Int        -- for optimization of equality test, see Eq instance
                                      ,  unXN ::   String
                                      }
                                   deriving (Typeable)
@@ -158,9 +158,9 @@
 -- When dealing with namespaces, the document tree must be processed by 'Text.XML.HXT.Arrow.Namespace.propagateNamespaces'
 -- to split names of structure \"prefix:localPart\" and label the name with the apropriate namespace uri
 
-data QName      = QN { localPart'    :: ! XName
-                     , namePrefix'   :: ! XName
-                     , namespaceUri' :: ! XName
+data QName      = QN { localPart'    :: !XName
+                     , namePrefix'   :: !XName
+                     , namespaceUri' :: !XName
                      }
              deriving (Typeable)
 
@@ -507,9 +507,9 @@
 
 -- the name and string cache
 
-data NameCache          = NC { _newXN   :: ! Int                                       -- next free name id
-                             , _xnCache :: ! (M.Map String XName)
-                             , _qnCache :: ! (M.Map (XName, XName, XName) QName)       -- we need another type than QName
+data NameCache          = NC { _newXN   :: !Int                                       -- next free name id
+                             , _xnCache :: !(M.Map String XName)
+                             , _qnCache :: !(M.Map (XName, XName, XName) QName)       -- we need another type than QName
                              }                                                          -- for the key because of the unusable
                                                                                         -- Eq instance of QName
 type ChangeNameCache r  = NameCache -> (NameCache, r)
@@ -530,8 +530,8 @@
  , xmlNamespaceXName
  , xmlXName             :: XName
 
-initialXNames@
- [ nullXName
+initialXNames@[
+   nullXName
  , xmlnsNamespaceXName
  , xmlnsXName
  , xmlNamespaceXName
@@ -548,8 +548,7 @@
 
 xmlnsQN                 :: QName
 
-initialQNames@
- [xmlnsQN]              = [QN xmlnsXName nullXName xmlnsNamespaceXName]
+initialQNames@[xmlnsQN] = [QN xmlnsXName nullXName xmlnsNamespaceXName]
 
 initialCache            :: NameCache
 initialCache            = NC
diff --git a/src/Text/XML/HXT/Parser/XmlCharParser.hs b/src/Text/XML/HXT/Parser/XmlCharParser.hs
--- a/src/Text/XML/HXT/Parser/XmlCharParser.hs
+++ b/src/Text/XML/HXT/Parser/XmlCharParser.hs
@@ -49,8 +49,8 @@
 type SimpleXParser a    = XParser () a
 
 data XPState s          = XPState
-    { xps_normalizeNewline :: ! Bool
-    , xps_userState        :: s
+    { xps_normalizeNewline :: !Bool
+    , xps_userState        ::  s
     }
 
 withNormNewline         :: a -> XPState a
@@ -140,4 +140,3 @@
                          <?> "newline"
 
 -- ------------------------------------------------------------
-
