diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ##
 
+## 0.8.2
+
+* fix `Interval.union` of touching open intervals
+
 ## 0.8.1
 
 * `unBorel :: (Ord x) => Borel x -> [Interval x]`, the ordered list of intervals in the `Borel` set
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2022-2025 Melanie Phoenix Brown
+Copyright 2022-2026 Melanie Phoenix Brown
 
 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 
diff --git a/interval-patterns.cabal b/interval-patterns.cabal
--- a/interval-patterns.cabal
+++ b/interval-patterns.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               interval-patterns
-version:            0.8.1
+version:            0.8.2
 author:             Melanie Phoenix Brown
 synopsis:           Intervals, and monoids thereof
 category:           Algebra, Charts, Data Structures, Math, Statistics
@@ -10,7 +10,7 @@
 homepage:           https://github.com/mixphix/interval-patterns
 bug-reports:        https://github.com/mixphix/interval-patterns/issues
 extra-source-files: CHANGELOG.md
-copyright:          2022-2025 Melanie Phoenix Brown
+copyright:          2022-2026 Melanie Phoenix Brown
 description:
   Please see the README at https://github.com/mixphix/interval-patterns
 
@@ -25,7 +25,7 @@
     , indexed-traversable >=0.1.4   && <0.2
     , lattices            >=2.1     && <3
     , semirings           >=0.6     && <0.8
-    , time                >=1.9.3   && <1.15
+    , time                >=1.9.3   && <2
     , time-compat         >=1.9.6.1 && <1.10
 
   default-language:   GHC2021
diff --git a/src/Data/Interval.hs b/src/Data/Interval.hs
--- a/src/Data/Interval.hs
+++ b/src/Data/Interval.hs
@@ -111,6 +111,7 @@
 import Data.OneOrTwo (OneOrTwo (..))
 import Data.Ord (comparing)
 import GHC.Generics (Generic (..), type (:*:) (..))
+import Data.Bifunctor (second)
 
 -- | The kinds of extremum an interval can have.
 data Extremum
@@ -979,7 +980,7 @@
   OneOrTwo (Interval x)
 union i1 i2 = case adjacency i1 i2 of
   Before i j
-    | fst (upperBound i) == fst (lowerBound j) -> One (hull i j)
+    | second opposite (upperBound i) == lowerBound j -> One (hull i j)
     | otherwise -> Two i j
   Meets i _ k -> One (hull i k)
   Overlaps i _ k -> One (hull i k)
@@ -993,7 +994,7 @@
   OverlappedBy i _ k -> One (hull i k)
   MetBy i _ k -> One (hull i k)
   After i j
-    | fst (upperBound i) == fst (lowerBound j) -> One (hull i j)
+    | second opposite (upperBound i) == lowerBound j -> One (hull i j)
     | otherwise -> Two i j
 
 -- | /O(n log n)/. Get the union of a list of intervals.
