-- Precursor to nhc13test3.

class Test q where
   test :: q a
   test3 :: q a -> Bool

class Test q => Test2 q where
   test2 :: q a

data Data a = Nil

instance Test Data where
   test = Nil
   test3 q = True

instance Test2 Data where
   test2 = Nil

data T a = Single a | Other (T a)

f :: (Eval a,Test2 q) => T a -> q a
f (Other t) = test3 q `seq` q
   where q = f t
f (Single a) = test

main = print (case (f (Other (Single True)) :: Data Bool) of Nil -> True)