- (arg_prefix, arg_ids)
- | isVanillaDataCon data_con -- Instantiate from commmon base
- = ([], mkTemplateLocalsNum arg_base (dataConInstOrigArgTys data_con res_tys))
- | otherwise -- The case pattern binds type variables, which are used
- -- in the types of the arguments of the pattern
- = (ex_tvs ++ co_tvs ++ dict_vs, field_vs)
-
- (ex_tvs, co_tvs, arg_vs) = dataConInstPat uniqs' data_con res_tys
- (dict_vs, field_vs) = splitAt (length dc_theta) arg_vs
-
- (_, pre_dc_theta, dc_arg_tys) = dataConSig data_con
- dc_theta = filter (not . isEqPred) pre_dc_theta
-
- arg_base' = arg_base + length dc_theta
+ -- get pattern binders with types appropriately instantiated
+ arg_uniqs = map mkBuiltinUnique [arg_base..]
+ (ex_tvs, co_tvs, arg_vs) = dataConOrigInstPat arg_uniqs data_con res_tys