-- Check the constructor itself
tcConstructor pat name pat_ty `thenTc` \ (data_con, ex_tvs, dicts, lie_avail1, arg_tys) ->
let
- field_tys = zipEqual "tcPat"
- (map fieldLabelName (dataConFieldLabels data_con))
- arg_tys
+ -- not zipEqual: if the constructor isn't really a record, then
+ -- dataConFieldLabels will be empty (and each field in the pattern
+ -- will generate an error below).
+ field_tys = zip (map fieldLabelName (dataConFieldLabels data_con))
+ arg_tys
in
-- Check the fields
-- Instantiate it
let
- (tvs, theta, ex_tvs, ex_theta, arg_tys, tycon) = dataConSig data_con
+ (tvs, _, ex_tvs, ex_theta, arg_tys, tycon) = dataConSig data_con
-- Ignore the theta; overloaded constructors only
-- behave differently when called, not when used for
-- matching.