[GHC] #8162: Type unsoundness with type families and UndecidableInstances

GHC ghc-devs at haskell.org
Fri Aug 23 13:10:42 UTC 2013


#8162: Type unsoundness with type families and UndecidableInstances
-------------------------------------+-------------------------------------
       Reporter:  akio               |             Owner:
           Type:  bug                |            Status:  new
       Priority:  normal             |         Milestone:
      Component:  Compiler (Type     |           Version:  7.6.3
  checker)                           |  Operating System:  Unknown/Multiple
       Keywords:                     |   Type of failure:  GHC accepts
   Architecture:  Unknown/Multiple   |  invalid program
     Difficulty:  Unknown            |         Test Case:
     Blocked By:                     |          Blocking:
Related Tickets:                     |
-------------------------------------+-------------------------------------
 ''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.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8162>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler




More information about the ghc-tickets mailing list