diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,17 @@
 Release notes for `units`
 =========================
 
+Version 2.4.1.5
+---------------
+* Use the `(-)` operator of the underlying `Num` instance in `(|-|)`.
+  This prevents crashes when the underlying number type does not support
+  negation. (Issue #69)
+* Compatibility with GHC 9.2.
+
+Version 2.4.1.4
+---------------
+* Compatibility with GHC 9.0.
+
 Version 2.4.1.3
 ---------------
 * Compatibility with GHC 8.10, thanks to @ocharles.
diff --git a/Data/Metrology/Poly.hs b/Data/Metrology/Poly.hs
--- a/Data/Metrology/Poly.hs
+++ b/Data/Metrology/Poly.hs
@@ -221,7 +221,7 @@
 infixl 6 |-|
 -- | Subtract two compatible quantities
 (|-|) :: (d1 @~ d2, Num n) => Qu d1 l n -> Qu d2 l n -> Qu d1 l n
-a |-| b = a |+| qNegate b
+(Qu a) |-| (Qu b) = Qu (a - b)
 
 -- | Take the sum of a list of quantities
 qSum :: (Foldable f, Num n) => f (Qu d l n) -> Qu d l n
diff --git a/Data/Metrology/Z.hs b/Data/Metrology/Z.hs
--- a/Data/Metrology/Z.hs
+++ b/Data/Metrology/Z.hs
@@ -11,7 +11,7 @@
 {-# LANGUAGE TypeFamilies, DataKinds, TypeOperators, UndecidableInstances,
              GADTs, PolyKinds, TemplateHaskell, ScopedTypeVariables,
              EmptyCase, CPP, TypeSynonymInstances, FlexibleInstances,
-             InstanceSigs #-}
+             InstanceSigs, FlexibleContexts #-}
 #if __GLASGOW_HASKELL__ >= 800
 {-# LANGUAGE TypeApplications #-}
 #endif
diff --git a/units.cabal b/units.cabal
--- a/units.cabal
+++ b/units.cabal
@@ -1,5 +1,5 @@
 name:           units
-version:        2.4.1.4
+version:        2.4.1.5
 cabal-version:  >= 1.10
 synopsis:       A domain-specific type system for dimensional analysis
 homepage:       https://github.com/goldfirere/units
@@ -13,7 +13,7 @@
 license:        BSD3
 license-file:   LICENSE
 build-type:     Simple
-Tested-With: GHC == 7.8.4, GHC == 7.10.2, GHC == 7.10.3, GHC == 8.0.1, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1, GHC == 8.6.3, GHC == 8.8.1, GHC == 8.10.4, GHC == 9.0.1
+Tested-With: GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1, GHC == 8.6.3, GHC == 8.8.1, GHC == 8.10.4, GHC == 9.0.1, GHC == 9.2.1
 description:
 
     The units package provides a mechanism for compile-time
@@ -40,7 +40,7 @@
 source-repository this
   type:     git
   location: https://github.com/goldfirere/units.git
-  tag:      v2.4.1.3
+  tag:      v2.4.1.5
 
 library
   ghc-options: -Wall
@@ -67,7 +67,7 @@
   else
     build-depends: base >= 4.7 && < 5
                  , th-desugar >= 1.5.4
-                 , singletons >= 0.9 && < 3  
+                 , singletons >= 0.9 && < 3
                        -- keep it < 3 to avoid the need for singletons-th and -base
                  , vector-space >= 0.8
                  , linear >= 1.16.2
@@ -79,8 +79,8 @@
                  , units-parser >= 0.1 && < 1.0
                  , lens >= 4 && < 6
                  , deepseq >= 1.1.0.0 && < 1.5
-  exposed-modules:    
-    Data.Metrology, 
+  exposed-modules:
+    Data.Metrology,
     Data.Metrology.Internal,
     Data.Metrology.Show,
     Data.Metrology.Unsafe,
