import TysWiredIn ( stringTy )
import CmdLineOpts ( opt_IrrefutableTuples )
import DataCon ( dataConFieldLabels, dataConSourceArity )
-import PrelNames ( eqStringName, eqName, geName, minusName, cCallableClassName )
+import PrelNames ( eqStringName, eqName, geName, negateName, minusName, cCallableClassName )
import BasicTypes ( isBoxed )
import Bag
import Outputable
-- Check the fields
tc_fields field_tys rpats `thenTc` \ (rpats', lie_req3, tvs, ids, lie_avail2) ->
- returnTc (RecPat data_con pat_ty ex_tvs ex_dicts rpats',
+ returnTc (co_fn <$> RecPat data_con con_res_ty ex_tvs ex_dicts rpats',
lie_req1 `plusLIE` lie_req2 `plusLIE` lie_req3,
listToBag ex_tvs `unionBags` tvs,
ids,
Nothing -> returnNF_Tc (pos_lit_expr, emptyLIE) -- Positive literal
Just neg -> -- Negative literal
-- The 'negate' is re-mappable syntax
- tcLookupId neg `thenNF_Tc` \ neg_sel_id ->
- newMethod origin neg_sel_id [pat_ty] `thenNF_Tc` \ neg ->
- returnNF_Tc (HsApp (HsVar (instToId neg)) pos_lit_expr, unitLIE neg)
+ tcSyntaxName origin pat_ty negateName neg `thenTc` \ (neg_expr, neg_lie, _) ->
+ returnNF_Tc (HsApp neg_expr pos_lit_expr, neg_lie)
) `thenNF_Tc` \ (lit_expr, lie2) ->
returnTc (NPat lit' pat_ty (HsApp (HsVar (instToId eq)) lit_expr),
newMethodFromName origin pat_ty geName `thenNF_Tc` \ ge ->
-- The '-' part is re-mappable syntax
- tcGetInstLoc origin `thenNF_Tc` \ loc ->
- tcSyntaxName loc pat_ty minusName minus_name `thenTc` \ (minus_expr, minus_lie, _) ->
+ tcSyntaxName origin pat_ty minusName minus_name `thenTc` \ (minus_expr, minus_lie, _) ->
returnTc (NPlusKPat bndr_id i pat_ty
(SectionR (HsVar (instToId ge)) over_lit_expr)
-- Check arguments
tcPats tc_bndr arg_pats arg_tys `thenTc` \ (arg_pats', lie_req3, tvs, ids, lie_avail2) ->
- returnTc (co_fn <$> ConPat data_con pat_ty ex_tvs ex_dicts arg_pats',
+ returnTc (co_fn <$> ConPat data_con con_res_ty ex_tvs ex_dicts arg_pats',
lie_req1 `plusLIE` lie_req2 `plusLIE` lie_req3,
listToBag ex_tvs `unionBags` tvs,
ids,