[GHC] #9171: Can't match type family with kind polymorphism

GHC ghc-devs at haskell.org
Thu Jun 5 04:32:42 UTC 2014


#9171: Can't match type family with kind polymorphism
----------------------------+----------------------------------------------
       Reporter:            |             Owner:
  MikeIzbicki               |            Status:  new
           Type:  bug       |         Milestone:
       Priority:  normal    |           Version:  7.8.2
      Component:  Compiler  |  Operating System:  Unknown/Multiple
       Keywords:            |   Type of failure:  GHC rejects valid program
   Architecture:            |         Test Case:
  Unknown/Multiple          |          Blocking:
     Difficulty:  Unknown   |
     Blocked By:            |
Related Tickets:            |
----------------------------+----------------------------------------------
 Create a module with the following code:

 {{{
 data Base

 type family GetParam (p::k1) (t::k2) :: k3

 type instance GetParam Base t = t
 }}}

 It loads into GHCi just fine.  But when we run:

 {{{
 ghci> :t undefined :: GetParam Base (GetParam Base Int)
 }}}

 we get an error

 {{{
 <interactive>:1:14:
     Couldn't match expected type ‘GetParam Base (GetParam Base Int)’
                 with actual type ‘GetParam Base (GetParam Base Int)’
     NB: ‘GetParam’ is a type function, and may not be injective
     The type variable ‘k0’ is ambiguous
     In the ambiguity check for: GetParam Base (GetParam Base Int)
     To defer the ambiguity check to use sites, enable AllowAmbiguousTypes
     In an expression type signature: GetParam Base (GetParam Base Int)
     In the expression: undefined :: GetParam Base (GetParam Base Int)
 }}}

 If we modify the module by either

 1) set `k3` to `k2`, `k1`, or any concrete kind

 or

 2) set `k2` to any concrete kind

 then the ghci snippet will type check just fine.

 I assume that this is a mistake, and that the original code should work
 just fine.  If there is some reason, however, why the program would be
 unsound, then the error message should be made a bit more informative.
 The claim is that the kind `k0` is ambiguous, but it doesn't appear
 anywhere in my code!  In my full program, it took me a long time to narrow
 down that this was the source of the problem.

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


More information about the ghc-tickets mailing list