Cannot derive instance for non-stock-deriveable class [GHC-00158]
GHC cannot create derived instances for classes that are not deriveable through its stock deriving mechanism.
This restriction can be relaxed by enabling the DeriveAnyClass
language extension, in which case GHC will generate an empty instance declaration, with no explicitly-defined methods.
Additionally, this error can appear when incorrectly specifying the stock
strategy for a deriving
clause if the DerivingStrategies
language extension is enabled.
Examples
Cannot derive instance for non-stock-deriveable class
GHC cannot derive an instance for MyClass
, as it is not stock deriveable. Enabling the DeriveAnyClass
language extension allows the example to compile.
Error Message
:6:12: error: [GHC-00158]
NotStockDeriveable.hsCan't make a derived instance of ‘MyClass MyType’:
• MyClass’ is not a stock derivable class (Eq, Show, etc.)
‘In the data declaration for ‘MyType’
• Suggested fix: Perhaps you intended to use DeriveAnyClass
|
6 | deriving MyClass
| ^^^^^^^
NotStockDeriveable.hs
module NotStockDeriveable where
class MyClass a
data MyType = MyType
deriving MyClass
{-# LANGUAGE DeriveAnyClass #-}
module NotStockDeriveable where
class MyClass a
data MyType = MyType
deriving MyClass
Specifying an incorrect deriving strategy
In this example, the stock
strategy is incorrectly specified when deriving the Num
class (which is not stock deriveable). The solution is to specify the newtype
deriving strategy.
Error Message
:6:18: error: [GHC-00158]
IncorrectDerivingStrategy.hsCan't make a derived instance of
• Num IntWrapper’ with the stock strategy:
‘Num’ is not a stock derivable class (Eq, Show, etc.)
‘In the newtype declaration for ‘IntWrapper’
• |
6 | deriving stock Num
| ^^^
IncorrectDerivingStrategy.hs
{-# LANGUAGE DerivingStrategies #-}
module IncorrectDerivingStrategy where
newtype IntWrapper = Wrap { unwrap :: Int }
deriving stock Num
{-# LANGUAGE DerivingStrategies #-}
module IncorrectDerivingStrategy where
newtype IntWrapper = Wrap { unwrap :: Int }
deriving newtype Num