diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Revision history for quickcheck-lockstep
 
+## 0.8.3 -- 2026-03-02
+
+* PATCH: support `QuickCheck-2.18`
+* PATCH: support `ghc-9.14`
+
 ## 0.8.2 -- 2025-10-29
 
 * PATCH: support `QuickCheck-2.17`
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 # quickcheck-lockstep
 
-[![Hackage Version](https://img.shields.io/hackage/v/quickcheck-lockstep?label=hackage%20quickcheck-lockstep)](https://hackage.haskell.org/package/quickcheck-lockstep)
-[![Haskell CI](https://img.shields.io/github/actions/workflow/status/well-typed/quickcheck-lockstep/haskell.yml?label=Build)](https://github.com/well-typed/quickcheck-lockstep/actions/workflows/haskell.yml)
+[![Hackage Version](https://img.shields.io/hackage/v/quickcheck-lockstep?label=Hackage)](https://hackage.haskell.org/package/quickcheck-lockstep)
+[![Haskell CI](https://img.shields.io/github/actions/workflow/status/well-typed/quickcheck-lockstep/haskell.yml?label=Haskell%20CI)](https://github.com/well-typed/quickcheck-lockstep/actions/workflows/haskell.yml)
 
 `quickcheck-lockstep` is a library for lockstep-style testing with `quickcheck-dynamic`
 
diff --git a/quickcheck-lockstep.cabal b/quickcheck-lockstep.cabal
--- a/quickcheck-lockstep.cabal
+++ b/quickcheck-lockstep.cabal
@@ -1,6 +1,6 @@
 cabal-version:   3.4
 name:            quickcheck-lockstep
-version:         0.8.2
+version:         0.8.3
 license:         BSD-3-Clause
 license-file:    LICENSE
 author:          Edsko de Vries
@@ -29,6 +29,7 @@
    || ==9.8
    || ==9.10
    || ==9.12
+   || ==9.14
 
 source-repository head
   type:     git
@@ -37,7 +38,7 @@
 source-repository this
   type:     git
   location: https://github.com/well-typed/quickcheck-lockstep
-  tag:      quickcheck-lockstep-0.8.2
+  tag:      quickcheck-lockstep-0.8.3
 
 common language
   -- This is at the top-level so that `cabal check` does not complain.
@@ -139,11 +140,11 @@
 
   -- quickcheck-dynamic requires ghc 8.10 minimum
   build-depends:
-    , base                >=4.14  && <4.22
+    , base                >=4.14  && <4.23
     , constraints         ^>=0.13 || ^>=0.14
     , containers          ^>=0.6  || ^>=0.7  || ^>=0.8
     , mtl                 ^>=2.2  || ^>=2.3
-    , QuickCheck          ^>=2.14 || ^>=2.15 || ^>=2.16 || ^>=2.17
+    , QuickCheck          ^>=2.14 || ^>=2.15 || ^>=2.16 || ^>=2.17 || ^>=2.18
     , quickcheck-dynamic  ^>=4.0
 
   hs-source-dirs:  src
diff --git a/src/Test/QuickCheck/StateModel/Lockstep/EnvF.hs b/src/Test/QuickCheck/StateModel/Lockstep/EnvF.hs
--- a/src/Test/QuickCheck/StateModel/Lockstep/EnvF.hs
+++ b/src/Test/QuickCheck/StateModel/Lockstep/EnvF.hs
@@ -8,6 +8,7 @@
 -- > import Test.QuickCheck.StateModel.Lockstep.EnvF qualified as EnvF
 module Test.QuickCheck.StateModel.Lockstep.EnvF (
     EnvF -- opaque
+      (EnvF) -- Internal: exposed for testing only
     -- * Construction
   , empty
   , insert
@@ -16,7 +17,6 @@
   , keysOfType
   , shrinkVar
     -- * Internal: exposed for testing
-  , pattern EnvF
   , EnvEntry (..)
   ) where
 
diff --git a/src/Test/QuickCheck/StateModel/Lockstep/GVar.hs b/src/Test/QuickCheck/StateModel/Lockstep/GVar.hs
--- a/src/Test/QuickCheck/StateModel/Lockstep/GVar.hs
+++ b/src/Test/QuickCheck/StateModel/Lockstep/GVar.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                   #-}
 {-# LANGUAGE PatternSynonyms       #-}
 {-# LANGUAGE QuantifiedConstraints #-}
 {-# LANGUAGE UndecidableInstances  #-}
@@ -7,6 +8,7 @@
 -- Intended for unqualified import.
 module Test.QuickCheck.StateModel.Lockstep.GVar (
     GVar -- opaque
+      (GVar) -- Internal: exposed for testing only
   , AnyGVar(..)
     -- * Construction
   , unsafeMkGVar
@@ -18,8 +20,6 @@
   , lookUpEnvF
   , definedInEnvF
   , shrinkGVar
-    -- * Internal: exposed for testing
-  , pattern GVar
   ) where
 
 import           Prelude hiding (map)
