diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,6 +7,10 @@
 <!-- TOC ignore:true -->
 # tztime
 
+[![GitHub CI](https://github.com/serokell/tztime/workflows/CI/badge.svg)](https://github.com/serokell/tztime/actions)
+[![Hackage](https://img.shields.io/hackage/v/tztime.svg)](https://hackage.haskell.org/package/tztime)
+[![License: MPL 2.0](https://img.shields.io/badge/License-MPL%202.0-brightgreen.svg)](https://opensource.org/licenses/MPL-2.0)
+
 This package introduces:
 * The `TZTime` data type, a valid and unambiguous point in time in some time zone.
 * Functions for safely manipulating a `TZTime`.
diff --git a/src/Data/Time/TZTime/Internal.hs b/src/Data/Time/TZTime/Internal.hs
--- a/src/Data/Time/TZTime/Internal.hs
+++ b/src/Data/Time/TZTime/Internal.hs
@@ -31,6 +31,7 @@
 import Data.Time.Zones (LocalToUTCResult(..))
 import Data.Time.Zones qualified as TZ
 import GHC.Generics (Generic)
+import GHC.Records (HasField(..))
 import GHC.Stack (HasCallStack)
 import Text.ParserCombinators.ReadP (ReadP)
 import Text.ParserCombinators.ReadP qualified as P
@@ -67,6 +68,38 @@
     where
       tzIdent = T.unpack $ tziIdentifier tzi
 
+----------------------------------------------------------------------------
+-- TZTime fields
+----------------------------------------------------------------------------
+{-
+Note: We do not want users to be able to unsafely modify `TZTime`'s fields.
+
+For that reason, the `Data.Time.TZTime` module does
+not export its fields`; it exports functions like `tzTimeLocalTime` instead.
+
+We also export `HasField` instances for compatibility with `OverloadedRecordDot`.
+
+>>> import Data.Time.TZInfo as TZInfo
+>>> tz = fromPOSIXTime (TZInfo.fromLabel TZInfo.Europe__Rome) 0
+>>>
+>>> :set -XOverloadedRecordDot
+>>> tz.tzTimeLocalTime
+1970-01-01 01:00:00
+
+## WARNING! ##
+
+According to <https://gitlab.haskell.org/ghc/ghc/-/wikis/records/overloaded-record-fields>,
+there are plans to add `setField` to the `HasField` class, which could then
+be used to implement `OverloadedRecordUpdate`.
+This conflicts with our intent: we only want to support `OverloadedRecordDot`,
+but NOT `OverloadedRecordUpdate`!
+
+There are also proposals to split the `HasField` class in two.
+
+If `setField` is indeed added to the `HasField` class, we'll have to drop these instances.
+If the `HasField` class is split in two, that's not a problem.
+-}
+
 -- | The local time of this `TZTime`.
 tzTimeLocalTime :: TZTime -> LocalTime
 tzTimeLocalTime = tztLocalTime
@@ -78,6 +111,13 @@
 -- | The offset observed in this time zone at this moment in time.
 tzTimeOffset :: TZTime -> TimeZone
 tzTimeOffset = tztOffset
+
+-- | @since 0.1.1.0
+instance HasField "tzTimeLocalTime" TZTime LocalTime where getField = tzTimeLocalTime
+-- | @since 0.1.1.0
+instance HasField "tzTimeTZInfo" TZTime TZInfo where getField = tzTimeTZInfo
+-- | @since 0.1.1.0
+instance HasField "tzTimeOffset" TZTime TimeZone where getField = tzTimeOffset
 
 ----------------------------------------------------------------------------
 -- Constructors
diff --git a/tztime.cabal b/tztime.cabal
--- a/tztime.cabal
+++ b/tztime.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.35.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           tztime
-version:        0.1.0.0
+version:        0.1.1.0
 synopsis:       Safe timezone-aware handling of time.
 description:    This package introduces:
                 .
@@ -23,7 +23,8 @@
 tested-with:
     GHC == 8.10.7
   , GHC == 9.0.2
-  , GHC == 9.2.4
+  , GHC == 9.2.8
+  , GHC == 9.4.7
 extra-source-files:
     README.md
 
@@ -107,9 +108,9 @@
     , time >=1.9.2
     , time-compat >=1.9.4
     , tz >=0.1.3.4
+  default-language: Haskell2010
   if impl(ghc >= 9.2)
     ghc-options: -Wno-missing-kind-signatures
-  default-language: Haskell2010
 
 test-suite tztime-doctest
   type: exitcode-stdio-1.0
@@ -175,9 +176,9 @@
   build-depends:
       base
     , doctest-parallel
+  default-language: Haskell2010
   if impl(ghc >= 9.2)
     ghc-options: -Wno-missing-kind-signatures
-  default-language: Haskell2010
 
 test-suite tztime-test
   type: exitcode-stdio-1.0
@@ -258,6 +259,6 @@
     , time
     , time-compat
     , tztime
+  default-language: Haskell2010
   if impl(ghc >= 9.2)
     ghc-options: -Wno-missing-kind-signatures
-  default-language: Haskell2010
