diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,17 @@
 `hslua-module-doclayout` uses [PVP Versioning][1].
 The changelog is available [on GitHub][2].
 
+## 1.1.0
+
+Release pending.
+
+-   Require hslua-2.3 and tasty-lua-1.1.
+
+-   Type info is added to all fields.
+
+-   The `Doc` type is now associated with this module's docs,
+    making it easier to generate documentation.
+
 ## 1.0.4
 
 Released 2022-04-03.
diff --git a/hslua-module-doclayout.cabal b/hslua-module-doclayout.cabal
--- a/hslua-module-doclayout.cabal
+++ b/hslua-module-doclayout.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                hslua-module-doclayout
-version:             1.0.4
+version:             1.1.0
 synopsis:            Lua module wrapping Text.DocLayout.
 description:         Lua module wrapping @Text.DocLayout@.
 homepage:            https://github.com/hslua/hslua-module-doclayout
@@ -15,23 +15,22 @@
 extra-doc-files:     README.md
                      CHANGELOG.md
 extra-source-files:  test/test-doclayout.lua
-tested-with:         GHC == 8.0.2
-                   , GHC == 8.2.2
-                   , GHC == 8.4.4
+tested-with:         GHC == 8.4.4
                    , GHC == 8.6.5
                    , GHC == 8.8.4
                    , GHC == 8.10.7
                    , GHC == 9.0.2
-                   , GHC == 9.2.2
+                   , GHC == 9.2.6
+                   , GHC == 9.4.4
 
 source-repository head
   type:                git
   location:            https://github.com/hslua/hslua-module-doclayout.git
 
 common common-options
-  build-depends:       base              >= 4.9    && < 5
+  build-depends:       base              >= 4.11   && < 5
                      , doclayout         >= 0.2    && < 0.5
-                     , hslua             >= 2.1    && < 2.3
+                     , hslua             >= 2.3    && < 2.4
                      , text              >= 1.2    && < 2.1
 
   default-language:    Haskell2010
@@ -65,7 +64,7 @@
   build-depends:       hslua-module-doclayout
                      , tasty
                      , tasty-hunit
-                     , tasty-lua               >= 1.0 && < 1.1
+                     , tasty-lua               >= 1.1 && < 1.2
   type:                exitcode-stdio-1.0
   hs-source-dirs:      test
   main-is:             test-hslua-module-doclayout.hs
diff --git a/src/HsLua/Module/DocLayout.hs b/src/HsLua/Module/DocLayout.hs
--- a/src/HsLua/Module/DocLayout.hs
+++ b/src/HsLua/Module/DocLayout.hs
@@ -1,8 +1,8 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE FlexibleInstances    #-}
+{-# LANGUAGE LambdaCase           #-}
+{-# LANGUAGE OverloadedStrings    #-}
+{-# LANGUAGE ScopedTypeVariables  #-}
+{-# LANGUAGE TypeApplications     #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 {-|
 Module      : HsLua.Module.DocLayout
@@ -78,10 +78,6 @@
 import qualified Data.Text as T
 import qualified Text.DocLayout as Doc
 
-#if ! MIN_VERSION_base(4, 11, 0)
-import Data.Monoid ((<>))
-#endif
-
 --
 -- Module
 --
@@ -98,6 +94,7 @@
   , moduleDescription = description
   , moduleFunctions = functions
   , moduleOperations = []
+  , moduleTypeInitializers = [initType typeDoc]
   }
 
 --
@@ -105,7 +102,7 @@
 --
 
 -- | Exposed fields.
-fields :: LuaError e => [Field e]
+fields :: forall e. LuaError e => [Field e]
 fields =
   [ blankline
   , cr
@@ -114,36 +111,40 @@
   ]
 
 -- | Wrapped and documented 'Doc.blankline' value.
-blankline :: LuaError e => Field e
+blankline :: forall e. LuaError e => Field e
 blankline = Field
   { fieldName = "blankline"
   , fieldDescription = "Inserts a blank line unless one exists already."
+  , fieldType = udTypeSpec @e typeDoc
   , fieldPushValue = pushDoc Doc.blankline
   }
 
 -- | Wrapped and documented 'Doc.cr' value.
-cr :: LuaError e => Field e
+cr :: forall e. LuaError e => Field e
 cr = Field
   { fieldName = "cr"
   , fieldDescription = "A carriage return. Does nothing if we're at " <>
                        "the beginning of a line; " <>
                        "otherwise inserts a newline."
+  , fieldType = udTypeSpec @e typeDoc
   , fieldPushValue = pushDoc Doc.cr
   }
 
 -- | Wrapped and documented 'Doc.empty' value.
-empty :: LuaError e => Field e
+empty :: forall e. LuaError e => Field e
 empty = Field
   { fieldName = "empty"
   , fieldDescription = "The empty document."
+  , fieldType = udTypeSpec @e typeDoc
   , fieldPushValue = pushDoc Doc.empty
   }
 
 -- | Wrapped and documented 'Doc.space' value.
-space :: LuaError e => Field e
+space :: forall e. LuaError e => Field e
 space = Field
   { fieldName = "space"
   , fieldDescription = "A breaking (reflowable) space."
+  , fieldType = udTypeSpec @e typeDoc
   , fieldPushValue = pushDoc Doc.space
   }
 
