{-# LANGUAGE RankNTypes #-} -- Test silly type synonyms module ShouldCompile where type C u a = u -- Note 'a' unused foo :: (forall a. C u a -> C u a) -> u foo x = undefined x bar :: Num u => u bar = foo (\t -> t + t) -- The (Num u) should not get trapped inside the -- /\a-abstraction which the compiler constructs for -- the arg to foo. But it might because it's Num (C u a)! -- This test tickles a bizarre corner case documented -- as [Silly Type Synonym] in GHC.Tc.Utils.TcMType