Missing method in type class instance [GHC-06201]
Flag: -Wmissing-methods
Enabled by default
This warning means that a type class instance is missing some required method implementations.
Examples
No explicit implementation for method instance
Error Message
A.hs:7:10: warning: [GHC-06201] [-Wmissing-methods]
• No explicit implementation for
‘multiply’
• In the instance declaration for ‘Calculator Int’
|
7 | instance Calculator Int where
Explanation
The type class Calculator requires you to implement two methods: add and multiply.
However, the example instance instance Calculator Int only implements the method add and not multiply
To fix this, implement the method multiply!
A.hs
Before
module A where
class Calculator a where
add :: a -> a -> a
multiply :: a -> a -> a
instance Calculator Int where
add a b = a + b
After
module A where
class Calculator a where
add :: a -> a -> a
multiply :: a -> a -> a
instance Calculator Int where
add a b = a + b
multiply a b = a * b
No explicit implementation for method instance 2
Error Message
A.hs:8:10: warning: [GHC-06201] [-Wmissing-methods]
• No explicit implementation for
either ‘<*>’ or ‘liftA2’
• In the instance declaration for ‘Applicative Box’
|
8 | instance Applicative Box where
| ^^^^^^^^^^^^^^^
Explanation
The type class Applicative requires you to implement at least two methods:
pure, andliftA2ormultiply(can also be both).
Such or constraints can be expressed via the {-# MINIMAL #-} pragma.
To fix this, either implement the method liftA2 or <*>. For this example, we implemented <*>, but either or both is fine, too.
A.hs
Before
module A where
data Box t = SomeBox t
instance Functor Box where
fmap f (SomeBox a) = SomeBox (f a)
instance Applicative Box where
pure a = SomeBox a
After
module A where
data Box t = SomeBox t
instance Functor Box where
fmap f (SomeBox a) = SomeBox (f a)
instance Applicative Box where
pure a = SomeBox a
SomeBox f <*> SomeBox a = SomeBox (f a)