diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Changelog for the [`ghc-typelits-extra`](http://hackage.haskell.org/package/ghc-typelits-extra) package
 
+# 0.2.4 *January 4th 2018*
+* Add support for GHC-8.4.1-alpha1
+
 # 0.2.3 *May 15th 2017*
 * Support GHC 8.2
 * `Max`, `Min`, `GCD`, and `LCM` now have a commutativity property [#9](https://github.com/clash-lang/ghc-typelits-extra/issues/9)
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
 Copyright (c) 2015-2016, University of Twente,
-              2017, QBayLogic
+              2017-2018, QBayLogic B.V.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/ghc-typelits-extra.cabal b/ghc-typelits-extra.cabal
--- a/ghc-typelits-extra.cabal
+++ b/ghc-typelits-extra.cabal
@@ -1,5 +1,5 @@
 name:                ghc-typelits-extra
-version:             0.2.3
+version:             0.2.4
 synopsis:            Additional type-level operations on GHC.TypeLits.Nat
 description:
   Additional type-level operations on @GHC.TypeLits.Nat@:
@@ -40,12 +40,14 @@
 license-file:        LICENSE
 author:              Christiaan Baaij
 maintainer:          christiaan.baaij@gmail.com
-copyright:           Copyright © 2015-2016, University of Twente, 2017, QBayLogic
+copyright:           Copyright © 2015-2016, University of Twente,
+                                 2017-2018, QBayLogic B.V.
 category:            Type System
 build-type:          Simple
 extra-source-files:  README.md
                      CHANGELOG.md
 cabal-version:       >=1.10
+tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.1
 
 source-repository head
   type: git
@@ -63,13 +65,12 @@
   other-modules:       GHC.TypeLits.Extra.Solver.Unify
                        GHC.TypeLits.Extra.Solver.Operations
   build-depends:       base                      >= 4.8     && <5,
-                       ghc                       >= 7.10    && <8.4,
+                       ghc                       >= 7.10    && <8.6,
                        ghc-prim                  >= 0.5     && <1.0,
                        ghc-tcplugins-extra       >= 0.2,
-                       ghc-typelits-knownnat     >= 0.2     && <0.4,
+                       ghc-typelits-knownnat     >= 0.4     && <0.5,
                        ghc-typelits-natnormalise >= 0.5     && <0.6,
                        integer-gmp               >= 1.0     && <1.1,
-                       singletons                >= 2.2     && <3,
                        transformers              >= 0.4.2.0 && <0.6
   hs-source-dirs:      src
   default-language:    Haskell2010
@@ -95,7 +96,7 @@
   main-is:             Main.hs
   Other-Modules:       ErrorTests
   build-depends:       base                      >= 4.8 && <5,
-                       ghc-typelits-extra        >= 0.1.1,
+                       ghc-typelits-extra,
                        ghc-typelits-knownnat     >= 0.2,
                        ghc-typelits-natnormalise >= 0.4.1,
                        tasty                     >= 0.10,
diff --git a/src/GHC/TypeLits/Extra.hs b/src/GHC/TypeLits/Extra.hs
--- a/src/GHC/TypeLits/Extra.hs
+++ b/src/GHC/TypeLits/Extra.hs
@@ -1,5 +1,6 @@
 {-|
-Copyright  :  (C) 2015-2016, University of Twente
+Copyright  :  (C) 2015-2016, University of Twente,
+                  2017-2018, QBayLogic B.V.
 License    :  BSD2 (see the file LICENSE)
 Maintainer :  Christiaan Baaij <christiaan.baaij@gmail.com>
 
@@ -78,7 +79,6 @@
 where
 
 import Data.Proxy             (Proxy (..))
-import Data.Singletons.TH     (genDefunSymbols)
 import Data.Type.Bool         (If)
 import GHC.Base               (Int#,isTrue#,(==#),(+#))
 import GHC.Integer.Logarithms (integerLogBase#)
@@ -92,6 +92,9 @@
 import GHC.TypeLits           as N
 #endif
   (KnownNat, Nat, type (+), type (-), type (<=), type (<=?), natVal)
+#if MIN_VERSION_ghc(8,4,0)
+import GHC.TypeLits           (Div, Mod)
+#endif
 import GHC.TypeLits.KnownNat  (KnownNat2 (..), SNatKn (..), nameToSymbol)
 
 #if MIN_VERSION_ghc(8,2,0)
@@ -108,10 +111,7 @@
   Max n n = n
   Max x y = If (x <=? y) y x
 
-genDefunSymbols [''Max]
-
 instance (KnownNat x, KnownNat y) => KnownNat2 $(nameToSymbol ''Max) x y where
-  type KnownNatF2 $(nameToSymbol ''Max) = MaxSym0
   natSing2 = SNatKn (max (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))
 
 -- | Type-level 'min'
@@ -119,39 +119,34 @@
   Min n n = n
   Min x y = If (x <=? y) x y
 
-genDefunSymbols [''Min]
-
 instance (KnownNat x, KnownNat y) => KnownNat2 $(nameToSymbol ''Min) x y where
-  type KnownNatF2 $(nameToSymbol ''Min) = MinSym0
   natSing2 = SNatKn (min (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))
 
+#if !MIN_VERSION_ghc(8,4,0)
 -- | Type-level 'div'
 --
 -- Note that additional equations are provided by the type-checker plugin solver
 -- "GHC.TypeLits.Extra.Solver".
 type family Div (x :: Nat) (y :: Nat) :: Nat where
   Div x 1 = x
+#endif
 
 -- | A variant of 'Div' that rounds up instead of down
 type DivRU n d = Div (n + (d - 1)) d
 
-genDefunSymbols [''Div]
-
 instance (KnownNat x, KnownNat y, 1 <= y) => KnownNat2 $(nameToSymbol ''Div) x y where
-  type KnownNatF2 $(nameToSymbol ''Div) = DivSym0
   natSing2 = SNatKn (quot (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))
 
+#if !MIN_VERSION_ghc(8,4,0)
 -- | Type-level 'mod'
 --
 -- Note that additional equations are provided by the type-checker plugin solver
 -- "GHC.TypeLits.Extra.Solver".
 type family Mod (x :: Nat) (y :: Nat) :: Nat where
   Mod x 1 = 0
-
-genDefunSymbols [''Mod]
+#endif
 
 instance (KnownNat x, KnownNat y, 1 <= y) => KnownNat2 $(nameToSymbol ''Mod) x y where
-  type KnownNatF2 $(nameToSymbol ''Mod) = ModSym0
   natSing2 = SNatKn (rem (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))
 
 -- | Type-level `divMod`
@@ -165,10 +160,7 @@
 type family FLog (x :: Nat) (y :: Nat) :: Nat where
   FLog 2 1 = 0 -- Additional equations are provided by the custom solver
 
-genDefunSymbols [''FLog]
-
 instance (KnownNat x, KnownNat y, 2 <= x, 1 <= y) => KnownNat2 $(nameToSymbol ''FLog) x y where
-  type KnownNatF2 $(nameToSymbol ''FLog) = FLogSym0
 #if MIN_VERSION_ghc (8,2,0)
   natSing2 = SNatKn (intToNumber (integerLogBase# (natVal (Proxy @x)) (natVal (Proxy @y))))
 #else
@@ -183,10 +175,7 @@
 type family CLog (x :: Nat) (y :: Nat) :: Nat where
   CLog 2 1 = 0 -- Additional equations are provided by the custom solver
 
-genDefunSymbols [''CLog]
-
 instance (KnownNat x, KnownNat y, 2 <= x, 1 <= y) => KnownNat2 $(nameToSymbol ''CLog) x y where
-  type KnownNatF2 $(nameToSymbol ''CLog) = CLogSym0
   natSing2 = let x  = natVal (Proxy @x)
                  y  = natVal (Proxy @y)
                  z1 = integerLogBase# x y
@@ -212,10 +201,7 @@
 type family Log (x :: Nat) (y :: Nat) :: Nat where
   Log 2 1 = 0 -- Additional equations are provided by the custom solver
 
-genDefunSymbols [''Log]
-
 instance (KnownNat x, KnownNat y, FLog x y ~ CLog x y) => KnownNat2 $(nameToSymbol ''Log) x y where
-  type KnownNatF2 $(nameToSymbol ''Log) = LogSym0
   natSing2 = SNatKn (intToNumber (integerLogBase# (natVal (Proxy @x)) (natVal (Proxy @y))))
 
 -- | Type-level greatest common denominator (GCD).
@@ -230,10 +216,7 @@
   GCD x x = x
   -- Additional equations are provided by the custom solver
 
-genDefunSymbols [''GCD]
-
 instance (KnownNat x, KnownNat y) => KnownNat2 $(nameToSymbol ''GCD) x y where
-  type KnownNatF2 $(nameToSymbol ''GCD) = GCDSym0
   natSing2 = SNatKn (gcd (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))
 
 -- | Type-level least common multiple (LCM).
@@ -248,8 +231,5 @@
   LCM x x = x
   -- Additional equations are provided by the custom solver
 
-genDefunSymbols [''LCM]
-
 instance (KnownNat x, KnownNat y) => KnownNat2 $(nameToSymbol ''LCM) x y where
-  type KnownNatF2 $(nameToSymbol ''LCM) = LCMSym0
   natSing2 = SNatKn (lcm (N.natVal (Proxy @x)) (N.natVal (Proxy @y)))
diff --git a/src/GHC/TypeLits/Extra/Solver.hs b/src/GHC/TypeLits/Extra/Solver.hs
--- a/src/GHC/TypeLits/Extra/Solver.hs
+++ b/src/GHC/TypeLits/Extra/Solver.hs
@@ -13,6 +13,7 @@
 
 -}
 
+{-# LANGUAGE CPP           #-}
 {-# LANGUAGE TupleSections #-}
 
 {-# OPTIONS_HADDOCK show-extensions #-}
@@ -44,6 +45,9 @@
 import TyCoRep    (Type (..))
 import TysWiredIn (typeNatKind, promotedTrueDataCon, promotedFalseDataCon)
 import TcTypeNats (typeNatLeqTyCon)
+#if MIN_VERSION_ghc(8,4,0)
+import TcTypeNats (typeNatTyCons)
+#endif
 
 -- internal
 import GHC.TypeLits.Extra.Solver.Operations
@@ -161,8 +165,13 @@
     md <- lookupModule myModule myPackage
     ExtraDefs <$> look md "Max"
               <*> look md "Min"
+#if MIN_VERSION_ghc(8,4,0)
+              <*> pure (typeNatTyCons !! 5)
+              <*> pure (typeNatTyCons !! 6)
+#else
               <*> look md "Div"
               <*> look md "Mod"
+#endif
               <*> look md "FLog"
               <*> look md "CLog"
               <*> look md "Log"
diff --git a/src/GHC/TypeLits/Extra/Solver/Operations.hs b/src/GHC/TypeLits/Extra/Solver/Operations.hs
--- a/src/GHC/TypeLits/Extra/Solver/Operations.hs
+++ b/src/GHC/TypeLits/Extra/Solver/Operations.hs
@@ -1,5 +1,6 @@
 {-|
-Copyright  :  (C) 2015-2016, University of Twente
+Copyright  :  (C) 2015-2016, University of Twente,
+                  2017     , QBayLogic B.V.
 License    :  BSD2 (see the file LICENSE)
 Maintainer :  Christiaan Baaij <christiaan.baaij@gmail.com>
 -}
diff --git a/src/GHC/TypeLits/Extra/Solver/Unify.hs b/src/GHC/TypeLits/Extra/Solver/Unify.hs
--- a/src/GHC/TypeLits/Extra/Solver/Unify.hs
+++ b/src/GHC/TypeLits/Extra/Solver/Unify.hs
@@ -1,5 +1,6 @@
 {-|
-Copyright  :  (C) 2015-2016, University of Twente
+Copyright  :  (C) 2015-2016, University of Twente,
+                  2017     , QBayLogic B.V.
 License    :  BSD2 (see the file LICENSE)
 Maintainer :  Christiaan Baaij <christiaan.baaij@gmail.com>
 -}
diff --git a/tests/ErrorTests.hs b/tests/ErrorTests.hs
--- a/tests/ErrorTests.hs
+++ b/tests/ErrorTests.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DataKinds, TypeOperators, TypeApplications, TypeFamilies, TemplateHaskell #-}
+{-# LANGUAGE CPP, DataKinds, TypeOperators, TypeApplications, TypeFamilies, TemplateHaskell #-}
 
 {-# OPTIONS_GHC -fdefer-type-errors #-}
 {-# OPTIONS_GHC -fplugin GHC.TypeLits.Normalise #-}
@@ -206,4 +206,8 @@
   ,"Actual type: Proxy (a * b) -> Proxy (a * b)"]
 
 testFail23Errors =
+#if __GLASGOW_HASKELL__ >= 804
+  ["Couldn't match type ‘'True’ with ‘'False’"]
+#else
   ["Couldn't match type ‘1 <=? Div 18 3’ with ‘'False’"]
+#endif
