Type synonym unused binds no warning?
I was taken aback this was accepted
type Silly a b = Maybe b
x :: Silly Int Bool
x = Just True
y :: Silly Char Bool
y = Just False
z = x == y -- returns False
What's with the a
in Silly
's decl? That's not a phantom type. It's ignored and thrown away. So x
and y
are the same type, and can be compare for equality.
I expected a rule: all tyvars in the type
's head must appear on rhs. Or at least a warning there was something silly. I tried -Wall, -fwarn-unused-binds
, -Wunused-type-patterns
.
I was just checking up on a remark that type synonyms are at the type level like implicit bidirectional pattern synonyms. For those, all vars must appear on both sides.
Trac metadata
Trac field | Value |
---|---|
Version | 8.6.1 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler (Parser) |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | Windows |
Architecture |