- -- Wrap a context around only if we want to
- -- show that contexts. Omit invisble ones
- -- and ones user's won't grok (HsPred p).
- add_ctxt (HsPredTy p) thing = thing
- add_ctxt (HsForAllTy Implicit tvs (L _ []) ty) thing = thing
- add_ctxt other_ty thing = addErrCtxt (typeCtxt ty) thing
+ -- Wrap a context around only if we want to show that contexts.
+ add_ctxt (HsPredTy p) thing = thing
+ -- Omit invisble ones and ones user's won't grok (HsPred p).
+ add_ctxt (HsForAllTy _ _ (L _ []) _) thing = thing
+ -- Omit wrapping if the theta-part is empty
+ -- Reason: the recursive call to kcLiftedType, in the ForAllTy
+ -- case of kc_hs_type, will do the wrapping instead
+ -- and we don't want to duplicate
+ add_ctxt other_ty thing = addErrCtxt (typeCtxt other_ty) thing
+
+ -- We infer the kind of the type, and then complain if it's
+ -- not right. But we don't want to complain about
+ -- (ty) or !(ty) or forall a. ty
+ -- when the real difficulty is with the 'ty' part.
+ strip (HsParTy (L _ ty)) = strip ty
+ strip (HsBangTy _ (L _ ty)) = strip ty
+ strip (HsForAllTy _ _ _ (L _ ty)) = strip ty
+ strip ty = ty