diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,12 +1,16 @@
+### 0.5.1 [2018.07.11]
+* Have `deriveGND`/`deriveVia` throw an error if an incorrect number of
+  arguments are supplied to the type class.
+
 ### 0.5 [2018.07.01]
 * Backport the changes to `GeneralizedNewtypeDeriving` and `DerivingVia` code
   generation from
   [Trac #15290](https://ghc.haskell.org/trac/ghc/ticket/15290).
 
   As a result, code generated by `deriveGND` or `deriveVia` now requires the
-  `InstanceSigs` language extension. On the other hand, the generated code
-  no longer requires the `ImpredicativeTypes` extension (unless any class
-  methods use higher-rank types).
+  `InstanceSigs` and `ScopedTypeVariables` language extensions. On the other
+  hand, the generated code no longer requires the `ImpredicativeTypes`
+  extension (unless any class methods use higher-rank types).
 * Allow building with `containers-0.6` and `template-haskell-2.14`.
 
 ### 0.4.3 [2018.06.16]
diff --git a/deriving-compat.cabal b/deriving-compat.cabal
--- a/deriving-compat.cabal
+++ b/deriving-compat.cabal
@@ -1,5 +1,5 @@
 name:                deriving-compat
-version:             0.5
+version:             0.5.1
 synopsis:            Backports of GHC deriving extensions
 description:         Provides Template Haskell functions that mimic deriving
                      extensions that were introduced or modified in recent versions
diff --git a/src/Data/Deriving/Via/Internal.hs b/src/Data/Deriving/Via/Internal.hs
--- a/src/Data/Deriving/Via/Internal.hs
+++ b/src/Data/Deriving/Via/Internal.hs
@@ -17,7 +17,7 @@
 module Data.Deriving.Via.Internal where
 
 #if MIN_VERSION_template_haskell(2,12,0)
-import           Control.Monad ((<=<))
+import           Control.Monad ((<=<), unless)
 
 import           Data.Deriving.Internal
 import qualified Data.Map as M
@@ -122,13 +122,20 @@
                               Nothing -> etaReductionError instanceTy
                           Nothing -> fail $ "Not a newtype: " ++ nameBase dataName
                       _ -> fail $ "Not a data type: " ++ pprint dataTy
-              concat . catMaybes <$> traverse (deriveViaDecs' clsTvbs clsArgs repTy) clsDecs
+              concat . catMaybes <$> traverse (deriveViaDecs' clsName clsTvbs clsArgs repTy) clsDecs
             (_, _) -> fail $ "Cannot derive instance for nullary class " ++ pprint clsTy
         _ -> fail $ "Not a type class: " ++ pprint clsTy
     _ -> fail $ "Malformed instance: " ++ pprint instanceTy
 
-deriveViaDecs' :: [TyVarBndr] -> [Type] -> Type -> Dec -> Q (Maybe [Dec])
-deriveViaDecs' clsTvbs clsArgs repTy = go
+deriveViaDecs' :: Name -> [TyVarBndr] -> [Type] -> Type -> Dec -> Q (Maybe [Dec])
+deriveViaDecs' clsName clsTvbs clsArgs repTy dec = do
+    let numExpectedArgs = length clsTvbs
+        numActualArgs   = length clsArgs
+    unless (numExpectedArgs == numActualArgs) $
+      fail $ "Mismatched number of class arguments"
+          ++ "\n\tThe class " ++ nameBase clsName ++ " expects " ++ show numExpectedArgs ++ " argument(s),"
+          ++ "\n\tbut was provided " ++ show numActualArgs ++ " argument(s)."
+    go dec
   where
     go :: Dec -> Q (Maybe [Dec])
 
