Ticket #7404 (closed bug: fixed)

Opened 6 months ago

Last modified 6 months ago

Inconsistent treatment of overlap between type and kind variables in type families

Reported by: goldfire Owned by:
Priority: normal Milestone:
Component: Compiler (Type checker) Version: 7.7
Keywords: PolyKinds Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Difficulty: Unknown
Test Case: polykinds/T7404 Blocked By:
Blocking: Related Tickets:

Description

The following code compiles on 7.7.20121031:

type family Foo (x :: *) (y :: x)
type instance Foo Bool Int = Int

After some poking around, I discovered that GHC is treating the type variable x and the kind variable x as distinct. In core, Foo has three arguments.

The following code does not compile:

type family Bar (x :: *) :: x

The error is

    Type variable `x' used in a kind
    In the kind `x'

I can see arguments in favor of either of the above treatments (separate namespaces for type and kind variables vs. unified namespace), but the current implementation seems inconsistent to me.

Change History

Changed 6 months ago by simonpj@…

commit 661c1c112eb40efd75ac61643c3e1231f60d58d4

Author: Simon Peyton Jones <simonpj@microsoft.com>
Date:   Mon Nov 26 12:18:15 2012 +0000

    Improve error message when a variable is used both as kind and type variable
    
    Fixes Trac #7404

 compiler/rename/RnTypes.lhs |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

Changed 6 months ago by simonpj

  • status changed from new to closed
  • difficulty set to Unknown
  • resolution set to fixed
  • testcase set to polykinds/T7404

See also #6021.

Note: See TracTickets for help on using tickets.