Recusive superclass epansion is over-keen
Consider this, with RecursiveSuperClasses:
class C a => D a where
cop :: a -> a
class D a => C a where
dop :: a -> a
g :: C a => a -> Bool
g x = g x
f :: C a => a -> Bool
f x = g x
When we compile this we get
f = \ (@ a_aXf) ($dC_aXh :: C a_aXf) (eta_B1 :: a_aXf) ->
g @ a_aXf (Foo.$p1D @ a_aXf (Foo.$p1C @ a_aXf $dC_aXh)) eta_B1
Notice the ridiculous double superclass selection from $dC_aXh. It's not wrong, just stupid!
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.2.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |