#include "HsVersions.h"
-import {-# SOURCE #-} TcExpr( tcExpr )
-
import HsSyn ( InPat(..), OutPat(..), HsLit(..), HsExpr(..), Sig(..) )
import RnHsSyn ( RenamedPat )
import TcHsSyn ( TcPat, TcId )
)
import Id ( Id, idType, isDataConWrapId_maybe )
import Type ( Type, isTauTy, mkTyConApp, mkClassPred, boxedTypeKind )
-import PprType ( {- instance Outputable Type -} )
import Subst ( substTy, substClasses )
import TysPrim ( charPrimTy, intPrimTy, floatPrimTy,
doublePrimTy, addrPrimTy
)
import TysWiredIn ( charTy, stringTy, intTy )
-import SrcLoc ( SrcLoc )
import Unique ( eqClassOpKey, geClassOpKey, minusClassOpKey,
cCallableClassKey
)
-- 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.