diff --git a/active.cabal b/active.cabal
--- a/active.cabal
+++ b/active.cabal
@@ -1,5 +1,5 @@
 name:                active
-version:             0.2.0.14
+version:             0.2.0.15
 synopsis:            Abstractions for animation
 description:         "Active" abstraction for animated things with finite start and end times.
 license:             BSD3
@@ -12,7 +12,7 @@
 cabal-version:       1.18
 extra-source-files:  CHANGES, README.markdown, diagrams/*.svg
 extra-doc-files:     diagrams/*.svg
-tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.2, GHC == 8.6.1, GHC == 8.8.1
+tested-with:         GHC == 7.8.4 || ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.4 || ==9.0.1
 bug-reports:         https://github.com/diagrams/active/issues
 source-repository head
   type:     git
@@ -20,25 +20,25 @@
 
 library
   exposed-modules:     Data.Active
-  build-depends:       base >= 4.0 && < 4.14,
+  build-depends:       base >= 4.0 && < 4.16,
                        vector >= 0.10,
                        semigroups >= 0.1 && < 0.20,
                        semigroupoids >= 1.2 && < 5.4,
-                       lens >= 4.0 && < 4.19,
-                       linear >= 1.14 && < 1.21
+                       lens >= 4.0 && < 5.1,
+                       linear >= 1.14 && < 1.22
   hs-source-dirs:      src
   default-language:    Haskell2010
 
 test-suite active-tests
     type:              exitcode-stdio-1.0
     main-is:           active-tests.hs
-    build-depends:     base >= 4.0 && < 4.14,
+    build-depends:     base >= 4.0 && < 4.16,
                        vector >= 0.10,
                        semigroups >= 0.1 && < 0.20,
                        semigroupoids >= 1.2 && < 5.4,
-                       lens >= 4.0 && < 4.19,
-                       linear >= 1.14 && < 1.21,
-                       QuickCheck >= 2.9 && < 2.14
+                       lens >= 4.0 && < 5.1,
+                       linear >= 1.14 && < 1.22,
+                       QuickCheck >= 2.9 && < 2.15
     other-modules:     Data.Active
     hs-source-dirs:    src, test
     default-language:  Haskell2010
diff --git a/src/Data/Active.hs b/src/Data/Active.hs
--- a/src/Data/Active.hs
+++ b/src/Data/Active.hs
@@ -178,11 +178,6 @@
 fromTime :: Time n -> n
 fromTime = unTime
 
-instance Affine Time where
-  type Diff Time = Duration
-  (Time t1) .-. (Time t2) = Duration (t1 - t2)
-  (Time t) .+^ (Duration d) = Time (t + d)
-
 -- instance Deadline Time a where
 --   -- choose tm deadline (if before / at deadline) (if after deadline)
 --   choose t1 t2 a b = if t1 <= t2 then a else b
@@ -194,15 +189,13 @@
 newtype Duration n = Duration n
   deriving (Eq, Ord, Show, Read, Enum, Num, Fractional, Real, RealFrac, Functor)
 
-makeWrapped ''Duration
-
 -- | A convenient wrapper function to convert a numeric value into a duration.
 toDuration :: n -> Duration n
 toDuration = Duration
 
 -- | A convenient unwrapper function to turn a duration into a numeric value.
 fromDuration :: Duration n -> n
-fromDuration = op Duration
+fromDuration (Duration n) = n
 
 instance Applicative Duration where
   pure = Duration
@@ -217,6 +210,15 @@
 instance Num n => Monoid (Duration n) where
   mappend = (<>)
   mempty  = 0
+
+instance Affine Time where
+  -- It is important that this deffinition comes *after*
+  -- the 'Additive' instance of 'Duration' to build with GHC-9.0
+  type Diff Time = Duration
+  (Time t1) .-. (Time t2) = Duration (t1 - t2)
+  (Time t) .+^ (Duration d) = Time (t + d)
+
+makeWrapped ''Duration
 
 -- | An @Era@ is a concrete span of time, that is, a pair of times
 --   representing the start and end of the era. @Era@s form a
