import Name ( getSrcLoc )
import PprCore
import ErrUtils ( dumpIfSet_core, ghcExit, Message, showPass,
- addErrLocHdrLine )
-import SrcLoc ( SrcLoc, noSrcLoc )
+ mkLocMessage )
+import SrcLoc ( SrcLoc, noSrcLoc, mkSrcSpan )
import Type ( Type, tyVarsOfType, eqType,
splitFunTy_maybe, mkTyVarTy,
splitForAllTy_maybe, splitTyConApp_maybe, splitTyConApp,
isUnLiftedType, typeKind,
isUnboxedTupleType,
- hasMoreBoxityInfo
+ isSubKind
)
import TyCon ( isPrimTyCon )
import BasicTypes ( RecFlag(..), isNonRec )
import CmdLineOpts
-import Maybe
import Outputable
+#ifdef DEBUG
+import Util ( notNull )
+#endif
+
+import Maybe
import IO ( hPutStrLn, stderr )
infixr 9 `thenL`, `seqL`
tyvar_kind = tyVarKind tyvar
argty_kind = typeKind arg_ty
in
- if argty_kind `hasMoreBoxityInfo` tyvar_kind
+ if argty_kind `isSubKind` tyvar_kind
-- Arg type might be boxed for a function with an uncommitted
-- tyvar; notably this is used so that we can give
-- error :: forall a:*. String -> a
lintCoreAlt scrut_ty alt@(DataAlt con, args, rhs)
= addLoc (CaseAlt alt) (
- mapL (\arg -> checkL (not (isUnboxedTupleType (idType arg)))
- (mkUnboxedTupleMsg arg)) args `seqL`
+ mapL (\arg -> checkL (not (isId arg && isUnboxedTupleType (idType arg)))
+ (mkUnboxedTupleMsg arg)) args `seqL`
addInScopeVars args (
context | opt_PprStyle_Debug = vcat (reverse cxts) $$ cxt1
| otherwise = cxt1
- mk_msg msg = addErrLocHdrLine loc context msg
+ mk_msg msg = mkLocMessage (mkSrcSpan loc loc) (context $$ msg)
addLoc :: LintLocInfo -> LintM a -> LintM a
addLoc extra_loc m loc scope errs
addInScopeVars :: [Var] -> LintM a -> LintM a
addInScopeVars ids m loc scope errs
- = m loc (scope `unionVarSet` mkVarSet ids) errs
+ = m loc (extendVarSetList scope ids) errs
\end{code}
\begin{code}