diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for lifted-async
 
+## v0.11.0 - 2025-09-06
+
+* Drop support for GHC 7 and allow base-4.22 ([#47](https://github.com/maoe/lifted-async/pull/47))
+
 ## v0.10.2.7 - 2024-11-03
 
 * Allow base-4.21, tasty-bench-0.4, bump Haskell CI to GHC 9.12.0 ([#46](https://github.com/maoe/lifted-async/pull/46))
diff --git a/lifted-async.cabal b/lifted-async.cabal
--- a/lifted-async.cabal
+++ b/lifted-async.cabal
@@ -1,6 +1,6 @@
 cabal-version:       1.24
 name:                lifted-async
-version:             0.10.2.7
+version:             0.11.0
 synopsis:            Run lifted IO operations asynchronously and wait for their results
 homepage:            https://github.com/maoe/lifted-async
 bug-reports:         https://github.com/maoe/lifted-async/issues
@@ -8,14 +8,15 @@
 license-file:        LICENSE
 author:              Mitsutoshi Aoe
 maintainer:          Mitsutoshi Aoe <me@maoe.name>
-copyright:           Copyright (C) 2012-2024 Mitsutoshi Aoe
+copyright:           Copyright (C) 2012-2025 Mitsutoshi Aoe
 category:            Concurrency
 build-type:          Simple
 tested-with:
-  GHC == 9.12.0
-  GHC == 9.10.1
-  GHC == 9.8.2
-  GHC == 9.6.6
+  GHC == 9.14.1
+  GHC == 9.12.2
+  GHC == 9.10.2
+  GHC == 9.8.4
+  GHC == 9.6.7
   GHC == 9.4.8
   GHC == 9.2.8
   GHC == 9.0.2
@@ -35,21 +36,18 @@
   instance of 'MonadBase' or 'MonadBaseControl'.
 
 library
+  hs-source-dirs: src
   exposed-modules:
     Control.Concurrent.Async.Lifted
     Control.Concurrent.Async.Lifted.Safe
   build-depends:
-      base >= 4.5 && < 4.22
+      base >= 4.9 && < 4.23
     , async >= 2.2 && < 2.3
     , lifted-base >= 0.2 && < 0.3
     , transformers-base >= 0.4 && < 0.5
     , monad-control == 1.0.*
-  if impl(ghc >= 7.8)
-    build-depends: constraints >= 0.2 && < 0.15
-  else
-    build-depends: constraints >= 0.2 && < 0.6
+    , constraints >= 0.2 && < 0.15
   ghc-options: -Wall
-  hs-source-dirs: src
   default-language: Haskell2010
 
 test-suite test-lifted-async
@@ -64,10 +62,8 @@
   ghc-options: -Wall -threaded
   build-depends:
       base
-    , HUnit
     , lifted-async
     , lifted-base
-    , monad-control
     , mtl
     , tasty
     , tasty-expected-failure < 0.13
@@ -82,9 +78,7 @@
   ghc-options: -Wall -threaded
   build-depends:
       base
-    , async
     , lifted-async
-    , mtl
     , tasty-hunit >= 0.9 && < 0.11
     , tasty-th
   default-language: Haskell2010
@@ -98,7 +92,6 @@
       base
     , async
     , tasty-bench < 0.5
-    , deepseq
     , lifted-async
   default-language: Haskell2010
 
@@ -111,7 +104,6 @@
       base
     , async
     , tasty-bench < 0.5
-    , deepseq
     , lifted-async
   default-language: Haskell2010
 
diff --git a/src/Control/Concurrent/Async/Lifted.hs b/src/Control/Concurrent/Async/Lifted.hs
--- a/src/Control/Concurrent/Async/Lifted.hs
+++ b/src/Control/Concurrent/Async/Lifted.hs
@@ -86,13 +86,7 @@
 import qualified Control.Concurrent.Async as A
 import qualified Control.Exception.Lifted as E
 
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 710
-import Data.Foldable
-import Data.Traversable
-#endif
-#if !MIN_VERSION_base(4, 8, 0)
-import Data.Monoid (Monoid(mappend, mempty))
-#elif MIN_VERSION_base(4, 9, 0) && !MIN_VERSION_base(4, 13, 0)
+#if !MIN_VERSION_base(4, 11, 0)
 import Data.Semigroup (Semigroup((<>)))
 #endif
 
@@ -460,7 +454,6 @@
   Concurrently as <|> Concurrently bs =
     Concurrently $ either id id <$> race as bs
 
-#if MIN_VERSION_base(4, 9, 0)
 instance (MonadBaseControl IO m, Semigroup a) =>
   Semigroup (Concurrently m a) where
     (<>) = liftA2 (<>)
@@ -469,11 +462,6 @@
   Monoid (Concurrently m a) where
     mempty = pure mempty
     mappend = (<>)
-#else
-instance (MonadBaseControl IO m, Monoid a) => Monoid (Concurrently m a) where
-  mempty = pure mempty
-  mappend = liftA2 mappend
-#endif
 
 sequenceEither :: MonadBaseControl IO m => Either e (StM m a) -> m (Either e a)
 sequenceEither = either (return . Left) (fmap Right . restoreM)
diff --git a/src/Control/Concurrent/Async/Lifted/Safe.hs b/src/Control/Concurrent/Async/Lifted/Safe.hs
--- a/src/Control/Concurrent/Async/Lifted/Safe.hs
+++ b/src/Control/Concurrent/Async/Lifted/Safe.hs
@@ -92,13 +92,7 @@
 
 import qualified Control.Concurrent.Async.Lifted as Unsafe
 
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 710
-import Data.Foldable
-import Data.Traversable
-#endif
-#if !MIN_VERSION_base(4, 8, 0)
-import Data.Monoid (Monoid(mappend, mempty))
-#elif MIN_VERSION_base(4, 9, 0) && !MIN_VERSION_base(4, 13, 0)
+#if !MIN_VERSION_base(4, 11, 0)
 import Data.Semigroup (Semigroup((<>)))
 #endif
 
@@ -438,7 +432,6 @@
         \\ (inst :: Forall (Pure m) :- Pure m a)
         \\ (inst :: Forall (Pure m) :- Pure m b)
 
-#if MIN_VERSION_base(4, 9, 0)
 instance (MonadBaseControl IO m, Semigroup a, Forall (Pure m)) =>
   Semigroup (Concurrently m a) where
     (<>) = liftA2 (<>)
@@ -447,9 +440,3 @@
   Monoid (Concurrently m a) where
     mempty = pure mempty
     mappend = (<>)
-#else
-instance (MonadBaseControl IO m, Monoid a, Forall (Pure m)) =>
-  Monoid (Concurrently m a) where
-    mempty = pure mempty
-    mappend = liftA2 mappend
-#endif
diff --git a/tests/Test/Async/Common.hs b/tests/Test/Async/Common.hs
--- a/tests/Test/Async/Common.hs
+++ b/tests/Test/Async/Common.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE FlexibleContexts #-}
 module Test.Async.Common
   ( value
@@ -6,8 +5,6 @@
   , module X
   ) where
 
-import Data.Typeable
-
 import Control.Exception.Lifted
 import Test.Tasty as X
 import Test.Tasty.HUnit as X
@@ -17,6 +14,6 @@
 value = 42
 
 data TestException = TestException
-  deriving (Eq, Show, Typeable)
+  deriving (Eq, Show)
 
 instance Exception TestException
diff --git a/tests/Test/Async/IO.hs b/tests/Test/Async/IO.hs
--- a/tests/Test/Async/IO.hs
+++ b/tests/Test/Async/IO.hs
@@ -9,11 +9,7 @@
 import Control.Concurrent.Lifted
 import Control.Exception.Lifted as E
 
-#if MIN_VERSION_monad_control(1, 0, 0)
 import Control.Concurrent.Async.Lifted.Safe
-#else
-import Control.Concurrent.Async.Lifted
-#endif
 import Test.Async.Common
 
 ioTestGroup :: TestTree
diff --git a/tests/Test/Async/Reader.hs b/tests/Test/Async/Reader.hs
--- a/tests/Test/Async/Reader.hs
+++ b/tests/Test/Async/Reader.hs
@@ -11,11 +11,7 @@
 import Control.Exception.Lifted as E
 import Test.Tasty.ExpectedFailure
 
-#if MIN_VERSION_monad_control(1, 0, 0)
 import Control.Concurrent.Async.Lifted.Safe
-#else
-import Control.Concurrent.Async.Lifted
-#endif
 import Test.Async.Common
 
 readerTestGroup :: TestTree
diff --git a/tests/TestSuite.hs b/tests/TestSuite.hs
--- a/tests/TestSuite.hs
+++ b/tests/TestSuite.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE ScopedTypeVariables,DeriveDataTypeable #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 module Main where
 import Test.Tasty (defaultMain, testGroup)
 
