(field_tyvars,pre_field_theta,field_tau) = tcSplitSigmaTy field_ty
- mk_co_var k = mkWildCoVar k
- eq_vars = map (mk_co_var . mkPredTy)
- (filter isEqPred pre_field_theta)
-
field_theta = filter (not . isEqPred) pre_field_theta
field_dict_tys = mkPredTys field_theta
n_field_dict_tys = length field_dict_tys
-- the context stuff; hence the arg_prefix binding below
mkReboxingAlt uniqs data_con (arg_prefix ++ arg_ids) rhs
where
+ -- TODO: this is *not* right; Orig vs Rep tys
(arg_prefix, arg_ids)
| isVanillaDataCon data_con -- Instantiate from commmon base
= ([], mkTemplateLocalsNum arg_base (dataConInstOrigArgTys data_con res_tys))
uniq_list = map mkBuiltinUnique [unpack_base..]
Succeeded refinement = gadtRefine emptyRefinement ex_tvs co_tvs
- (co_fn, out_ty) = refineType refinement (idType the_arg_id)
+ (co_fn, _) = refineType refinement (idType the_arg_id)
- rhs = ASSERT(out_ty `coreEqType` field_tau) perform_co co_fn (Var the_arg_id)
+ rhs = perform_co co_fn (Var the_arg_id)
perform_co (ExprCoFn co) expr = Cast expr co
perform_co id_co expr = ASSERT(isIdCoercion id_co) expr