diff --git a/Control/Monad/Logic.hs b/Control/Monad/Logic.hs
--- a/Control/Monad/Logic.hs
+++ b/Control/Monad/Logic.hs
@@ -3,17 +3,13 @@
 -- Module      : Control.Monad.Logic
 -- Copyright   : (c) Dan Doel
 -- License     : BSD3
---
--- Maintainer  : dan.doel@gmail.com
--- Stability   : experimental
--- Portability : non-portable (multi-parameter type classes)
+-- Maintainer  : Andrew Lelechenko <andrew.lelechenko@gmail.com>
 --
 -- A backtracking, logic programming monad.
 --
 --    Adapted from the paper
---    /Backtracking, Interleaving, and Terminating
---        Monad Transformers/, by
---    Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr Sabry
+--    /Backtracking, Interleaving, and Terminating Monad Transformers/,
+--    by Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr Sabry
 --    (<http://okmij.org/ftp/papers/LogicT.pdf>).
 -------------------------------------------------------------------------
 
@@ -58,8 +54,13 @@
 import Control.Monad.Error.Class
 
 #if !MIN_VERSION_base(4,8,0)
-import Data.Monoid (Monoid(mappend, mempty))
+import Data.Monoid (Monoid (..))
 #endif
+
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup (Semigroup (..))
+#endif
+
 import qualified Data.Foldable as F
 import qualified Data.Traversable as T
 
@@ -101,7 +102,7 @@
 -- | Runs a LogicT computation with the specified initial success and
 -- failure continuations.
 runLogicT :: LogicT m a -> (a -> m r -> m r) -> m r -> m r
-runLogicT = unLogicT
+runLogicT (LogicT r) = r
 
 -------------------------------------------------------------------------
 -- | The basic Logic monad, for performing backtracking computations
@@ -165,6 +166,17 @@
 instance MonadPlus (LogicT m) where
     mzero = LogicT $ \_ fk -> fk
     m1 `mplus` m2 = LogicT $ \sk fk -> unLogicT m1 sk (unLogicT m2 sk fk)
+
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup (LogicT m a) where
+  (<>) = mplus
+  sconcat = foldr1 mplus
+#endif
+
+instance Monoid (LogicT m a) where
+  mempty = mzero
+  mappend = mplus
+  mconcat = foldr mplus mzero
 
 instance MonadTrans LogicT where
     lift m = LogicT $ \sk fk -> m >>= \a -> sk a fk
diff --git a/Control/Monad/Logic/Class.hs b/Control/Monad/Logic/Class.hs
--- a/Control/Monad/Logic/Class.hs
+++ b/Control/Monad/Logic/Class.hs
@@ -3,18 +3,14 @@
 -- Module      : Control.Monad.Logic.Class
 -- Copyright   : (c) Dan Doel
 -- License     : BSD3
---
--- Maintainer  : dan.doel@gmail.com
--- Stability   : experimental
--- Portability : non-portable (multi-parameter type classes)
+-- Maintainer  : Andrew Lelechenko <andrew.lelechenko@gmail.com>
 --
 -- A backtracking, logic programming monad.
 --
 --    Adapted from the paper
---    /Backtracking, Interleaving, and Terminating
---        Monad Transformers/, by
---    Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr Sabry
---    (<http://okmij.org/ftp/papers/LogicT.pdf>)
+--    /Backtracking, Interleaving, and Terminating Monad Transformers/,
+--    by Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr Sabry
+--    (<http://okmij.org/ftp/papers/LogicT.pdf>).
 -------------------------------------------------------------------------
 
 {-# LANGUAGE CPP  #-}
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+# 0.7.0.3
+
+* Support GHC 9.0.
+
 # 0.7.0.2
 
 * Add `Safe` pragmas.
diff --git a/logict.cabal b/logict.cabal
--- a/logict.cabal
+++ b/logict.cabal
@@ -1,5 +1,5 @@
 name: logict
-version: 0.7.0.2
+version: 0.7.0.3
 license: BSD3
 license-file: LICENSE
 copyright:
@@ -8,7 +8,6 @@
   Copyright (c) 2014, Roman Cheplyaka
 maintainer: Andrew Lelechenko <andrew.lelechenko@gmail.com>
 author: Dan Doel
-tested-with: ghc -any
 homepage: https://github.com/Bodigrim/logict#readme
 synopsis: A backtracking logic-programming monad.
 description:
@@ -21,7 +20,8 @@
 build-type: Simple
 extra-source-files:
   changelog.md
-cabal-version: >=1.9.2
+cabal-version: >=1.10
+tested-with: GHC ==7.4.2 GHC ==7.6.3 GHC ==7.8.4 GHC ==7.10.3 GHC ==8.0.2 GHC ==8.2.2 GHC ==8.4.4 GHC ==8.6.5 GHC ==8.8.3 GHC ==8.10.1
 
 source-repository head
   type: git
@@ -31,6 +31,7 @@
   exposed-modules:
     Control.Monad.Logic
     Control.Monad.Logic.Class
+  default-language: Haskell2010
   ghc-options: -O2 -Wall
   build-depends:
     base >=2 && <5,
@@ -43,6 +44,7 @@
 test-suite logict-tests
   type: exitcode-stdio-1.0
   main-is: Test.hs
+  default-language: Haskell2010
   ghc-options: -Wall
   build-depends:
     base >=2 && <5,
