diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+## Changes in 3.3.0.0
+
+ * Add an `Ord` instance to `AlexPosn` (Issue [#233](https://github.com/haskell/alex/issues/233)).
+   This breaks developments that define their own (orphan) `instance Ord AlexPosn`.
+   If this is the derived stock instance, the fix is to delete the orphan instance and require
+   `build-tool-depends: alex:alex >= 3.3.0.0`.
+ * Switch to Haskell PVP versioning with four digits.
+ * Tested with GHC 7.0 - 9.6.1.
+
+_Andreas Abel, 2023-05-25_
+
 ## Change in 3.2.7.4
 
  * The user-supplied "epilogue" Haskell code is now put _last_ in the generated file.
diff --git a/alex.cabal b/alex.cabal
--- a/alex.cabal
+++ b/alex.cabal
@@ -1,6 +1,6 @@
 cabal-version: >= 1.10
 name: alex
-version: 3.2.7.4
+version: 3.3.0.0
 -- don't forget updating changelog.md!
 license: BSD3
 license-file: LICENSE
diff --git a/data/AlexWrappers.hs b/data/AlexWrappers.hs
--- a/data/AlexWrappers.hs
+++ b/data/AlexWrappers.hs
@@ -153,7 +153,7 @@
 
 #if defined(ALEX_POSN) || defined(ALEX_MONAD) || defined(ALEX_POSN_BYTESTRING) || defined(ALEX_MONAD_BYTESTRING) || defined(ALEX_GSCAN)
 data AlexPosn = AlexPn !Int !Int !Int
-        deriving (Eq,Show)
+        deriving (Eq, Show, Ord)
 
 alexStartPos :: AlexPosn
 alexStartPos = AlexPn 0 1 1
diff --git a/src/ParseMonad.hs b/src/ParseMonad.hs
--- a/src/ParseMonad.hs
+++ b/src/ParseMonad.hs
@@ -64,7 +64,7 @@
 -- assuming the usual eight character tab stops.
 
 data AlexPosn = AlexPn !Int !Int !Int
-        deriving (Eq,Show)
+        deriving (Eq, Show, Ord)
 
 alexStartPos :: AlexPosn
 alexStartPos = AlexPn 0 1 1
diff --git a/tests/tokens_monad_bytestring.x b/tests/tokens_monad_bytestring.x
--- a/tests/tokens_monad_bytestring.x
+++ b/tests/tokens_monad_bytestring.x
@@ -36,7 +36,9 @@
 	Int AlexPosn Int	|
         Err AlexPosn            |
         EOF
-        deriving (Eq,Show)
+        deriving (Eq,Ord,Show)
+  -- Adding 'Ord' is possible since 3.3.0 (issue #233)
+  -- where an 'Ord' instance for 'AlexPosn' is generated by default.
 
 alexEOF = return EOF
 
