+ -- We play a bit fast and loose by treating the superclasses
+ -- as ordinary arguments. That means that in the case of
+ -- class C a => D a
+ -- we don't get a newtype with no arguments!
+ args = sc_sel_names ++ op_names
+ arg_tys = map mkPredTy sc_theta ++ op_tys
+
+ ; dict_con <- buildDataCon datacon_name
+ False -- Not declared infix
+ (map (const NotMarkedStrict) args)
+ [{- No fields -}]
+ tvs [{- no existentials -}]
+ [{- No GADT equalities -}] [{- No theta -}]
+ arg_tys
+ (mkTyConApp rec_tycon (mkTyVarTys tvs))
+ rec_tycon
+