data PAInstance = PAInstance {
painstInstance :: Instance
+ , painstOrigTyCon :: TyCon
, painstVectTyCon :: TyCon
, painstArrTyCon :: TyCon
}
vect_tcs = keep_tcs ++ new_tcs
parr_tcs <- zipWithM buildPArrayTyCon orig_tcs vect_tcs
- pa_insts <- zipWithM buildPAInstance vect_tcs parr_tcs
+ pa_insts <- sequence $ zipWith3 buildPAInstance orig_tcs vect_tcs parr_tcs
let all_new_tcs = new_tcs ++ parr_tcs
types = [ty | dc <- tyConDataCons vect_tc
, ty <- dataConRepArgTys dc]
-buildPAInstance :: TyCon -> TyCon -> VM PAInstance
-buildPAInstance vect_tc arr_tc
+buildPAInstance :: TyCon -> TyCon -> TyCon -> VM PAInstance
+buildPAInstance orig_tc vect_tc arr_tc
= do
pa <- builtin paClass
let inst_ty = mkForAllTys tvs
return $ PAInstance {
painstInstance = mkLocalInstance dfun NoOverlap
+ , painstOrigTyCon = orig_tc
, painstVectTyCon = vect_tc
, painstArrTyCon = arr_tc
}