`-Wredundant-constraints` depends on the ordering of constraints with overlapping superclasses
Summary
The -Wredundant-constraints flag does not result in a warning when it should, due to the ordering of constraints.
Steps to reproduce
In the following code
{-# OPTIONS_GHC -Wredundant-constraints #-}
{-# OPTIONS_GHC -Werror #-}
module Test where
class A a where
a :: a -> a
class A a => B a where
b :: a
class A a => C a where
noWarning :: (C a, B a) => a
noWarning = a b
warning :: (B a, C a) => a
warning = a b
I get only the error
Test.hs:17:1: error: [-Wredundant-constraints, -Werror=redundant-constraints]
• Redundant constraint: C a
• In the type signature for:
warning :: forall a. (B a, C a) => a
|
17 | warning :: (B a, C a) => a
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
Expected behavior
There should be two errors, one for warning and one for noWarning. This would be in line with the behaviour of GHC with the constraints (Eq a, Ord a) and (Ord a, Eq a), both of which result in warnings in similar situations.
Environment
- GHC version used: 8.6.5
Edited by InThisStyle10s6p