GHC doesn't use fixity in type instances
If I say
data a * b
infixl 7 *
type family a + b
infixl 6 +
type instance Int * Bool + Double = Float
(with -XNoStarIsType -- * is not the issue here)
I get
• Illegal family instance for ‘*’
(* is not an indexed type family)
• In the type instance declaration for ‘*’
But that's wrong. The * should bind tighter than the +, meaning this is an instance for +, not *. This also fails for closed type families:
data a * b
infixl 7 *
type family a + b where
Int * Bool + Double = Float
infixl 6 +
Interestingly, a class instance works here.
This did not bite me "in the wild", but came up while reading the GHC source code. Still, it is a real bug.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.6.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |