id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	os	architecture	failure	difficulty	testcase	blockedby	blocking	related
2944	Mutually recursive equality constraints	MartijnVanSteenbergen	igloo	"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?

"	merge	closed	normal		Compiler (Type checker)	6.10.1	fixed			MacOS X	x86		Unknown	indexed-types/should_compile/T2944			
