content: {-# LANGUAGE TypeFamilies, PolyKinds #-}
  
  module T6018rnfail where
  
  -- IA = injectivity annotation `| foo -> bar`
  
  -- use incorrect tyvar in LHS of IA
  type family F a = r | a -> a
  type family Fc a = r | a -> a where
    Fc a = a
  class Fcl a where
    type Ft a = r | a -> a
  
  -- declare result tyvar to be duplicate (without IA)
  type family G a = a
  type family Gc a = a where
    Gc a = a
  
  -- declare result tyvar to be duplicate (with IA)
  type family Gb a = a | a -> a
  type family Gcb a = a | a -> a where
    Gcb a = a
  class Gclb a where -- here we want two errors
    type Gtb a = a | a -> a
  
  -- not in-scope tyvar in RHS of IA
  type family I a b = r | r -> c
  type family Ic a b = r | r -> c where
    Ic a b = a
  class Icl a b where
    type It a b = r | r -> c
  
  -- not in-scope tyvar in LHS of IA
  type family L a b = r | c -> a
  type family Lc a b = r | c -> a where
    Lc a b = a
  class Lcl a b where
    type Lt a b = r | c -> a
  
  -- result variable shadows variable in class head
  class M a b where
    type Mt b = a | a -> b
  
  -- here b is out-of-scope
  class N a b where
    type Nt a = r | r -> a b
  
  -- result is out of scope. Not possible for associated types
  type family O1  a | r -> a
  type family Oc1 a | r -> a where
      Oc1 a = a
  type family O2  a :: * | r -> a
  type family Oc2 a :: * | r -> a where
      Oc2 a = a
  