Opened 9 years ago

Closed 9 years ago

Last modified 9 years ago

#2944 closed merge (fixed)

Mutually recursive equality constraints

Reported by: MartijnVanSteenbergen Owned by: igloo
Priority: normal Milestone:
Component: Compiler (Type checker) Version: 6.10.1
Keywords: Cc:
Operating System: MacOS X Architecture: x86
Type of failure: None/Unknown Test Case: indexed-types/should_compile/T2944
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:


Given this piece of code:

{-# LANGUAGE TypeFamilies #-}

class C a where
  type T a :: *

f1 :: T a ~ () => a
f1 = f2

f2 :: T a ~ () => a
f2 = f1

GHC complains:

    Couldn't match expected type `T a ~ ()'
           against inferred type `T a1 ~ ()'
    When matching the contexts of the signatures for
      f1 :: forall a. (T a ~ ()) => a
      f2 :: forall a. (T a ~ ()) => a
    The signature contexts in a mutually recursive group should all be identical
    When generalising the type(s) for f1, f2

Is this a bug? Enabling RelaxedPolyRec fixes the problem. Should TypeFamilies—just like GADTs—imply RelaxedPolyRec?

Change History (4)

comment:1 Changed 9 years ago by simonpj

difficulty: Unknown
Owner: set to igloo
Type: bugmerge

I agree:

Tue Jan 13 16:27:16 GMT 2009
  * Make -XTypeFamilies imply -XRelaxedPolyRec (Trac #2944)

It's moot whether we should merge this, but on balance, yes.


comment:2 Changed 9 years ago by simonpj

Test Case: indexed-types/should_compile/T2944

comment:3 Changed 9 years ago by igloo

Resolution: fixed
Status: newclosed


comment:4 Changed 9 years ago by MartijnVanSteenbergen

Thanks. =)

Note: See TracTickets for help on using tickets.