Type unsoundness with type families and UndecidableInstances
''This problem has already been fixed but I'm creating a ticket here to attach an example that demonstrates the problem, following a suggestion here: http://www.haskell.org/pipermail/glasgow-haskell-users/2013-August/022716.html''
The following is accepted by GHC 7.6.
type family F a
type instance F (a -> a) = Int
type instance F (a -> a -> a) = IO String
However these definitions allows an Int to be coerced to IO String under !UndecidableInstances, breaking type safety. The problem is that you can define an infinite type LA = LA -> LA using type families, then F LA can be reduced to both Int and to IO String.
I'll attach a program that demonstrates how this problem can cause a segfault.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |