diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Changelog for the [`ghc-typelits-natnormalise`](http://hackage.haskell.org/package/ghc-typelits-natnormalise) package
 
+## 0.7.4 *February 12th 2021*
+* Fixes [#50](https://github.com/clash-lang/ghc-typelits-natnormalise/issues/50) `x ^ C ~ y` erroneously deemed hard insoluable, a contradiction, when `C` is some type family other than +,-,*,^
+
 ## 0.7.3 *January 1st 2021*
 * Build on GHC 9.0.1-rc1
 
diff --git a/ghc-typelits-natnormalise.cabal b/ghc-typelits-natnormalise.cabal
--- a/ghc-typelits-natnormalise.cabal
+++ b/ghc-typelits-natnormalise.cabal
@@ -1,5 +1,5 @@
 name:                ghc-typelits-natnormalise
-version:             0.7.3
+version:             0.7.4
 synopsis:            GHC typechecker plugin for types of kind GHC.TypeLits.Nat
 description:
   A type checker plugin for GHC that can solve /equalities/ and /inequalities/
diff --git a/src/GHC/TypeLits/Normalise/Unify.hs b/src/GHC/TypeLits/Normalise/Unify.hs
--- a/src/GHC/TypeLits/Normalise/Unify.hs
+++ b/src/GHC/TypeLits/Normalise/Unify.hs
@@ -593,7 +593,13 @@
 eqFV = (==) `on` fvSOP
 
 containsConstants :: CoreSOP -> Bool
-containsConstants = any (any (\c -> case c of {(C _) -> True; _ -> False}) . unP) . unS
+containsConstants =
+  any (any symbolContainsConstant . unP) . unS
+  where
+    symbolContainsConstant c = case c of
+      C {} -> True
+      E s p -> containsConstants s || containsConstants (S [p])
+      _ -> False
 
 safeDiv :: Integer -> Integer -> Maybe Integer
 safeDiv i j
