{-# LANGUAGE TypeFamilies, FlexibleInstances, GADTs #-}
-- This tests that we are able to extract record selectors for
-- associated types when the type itself is not exported. Making this
-- bug exhibit is very simple: simply mention a record field defined
-- inside of the associated type anywhere in the export list.
--
-- Note: ProblemCtor only shows up when T or A are exported but PolyCtor
-- only shows up when the class is exported as well, since it's polymorphic.
module Bug294 ( A, problemField, problemField', gadtField
              , TP(ProblemCtor), DP(ProblemCtor'), TO'(PolyCtor)) where

data A

class T t where
  data TO t :: *
  data TP t :: *

  t :: t

instance T A where
  data TO A = TA { problemField :: A }
  data TP A = ProblemCtor A

data family DO t :: *
data family DP t :: *

data instance DO A = DA { problemField' :: A }
data instance DP A = ProblemCtor' A

data GADT :: * -> * where
  Ctor :: { gadtField :: A } -> GADT A

class T' t where
  data TO' t :: *

instance T' a where
  data TO' a = PolyCtor