No instance arising [GHC-39999]
This error happens when an expression in the code has a type constraint (e.g.
Eq a => a -> a) requiring an instance of a type class but GHC can‘t find it.
This most commonly happens for two reasons: Either the type is to polymorphic (i.e. general) e.g.
forall a. a and there is no type signature declaring that the type should have the instance. Or the type is specific e.g.
Bool, but there is no instance for the desired type class defined for this type.
A usage of (==) on a data type which doesn‘t have an instance for Eq.
Main.hs:4:15: error: [GHC-39999] • No instance for (Eq Foo) arising from a use of ‘==’ • In the expression: foo == A In an equation for ‘isA’: isA foo = foo == A | 4 | isA foo = foo == A | ^^
== is only defined on types which have an instance for the
Eq type class. The data type Foo does not have an instance. So GHC doesn‘t know how to compare values of
To make this example compile we can create an
Eq instance by using a
data Foo = A | B isA :: Foo -> Bool isA foo = foo == A
data Foo = A | B deriving Eq isA :: Foo -> Bool isA foo = foo == A
A usage of `+` on a too polymorphic variable.
Main.hs:2:11: error: [GHC-39999] • No instance for (Num a) arising from a use of ‘+’ Possible fix: add (Num a) to the context of the type signature for: add :: forall a. a -> a -> a • In the expression: x + y In an equation for ‘add’: add x y = x + y | 2 | add x y = x + y | ^
+ is only defined on types which have an instance of the
Num type class. If the function has the signature
a -> a -> a someone could e.g. pass in a
a and GHC wouldn‘t know how to add two Strings. Too fix it, like the compiler suggests, we add the
Num a => constraint to the type signature to make sure that all users of
add provide a suitable
add :: a -> a -> a add x y = x + y
add :: Num a => a -> a -> a add x y = x + y