2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
6 Monadic type operations
8 This module contains monadic operations over types that contain
13 -- The above warning supression flag is a temporary kludge.
14 -- While working on this module you are encouraged to remove it and fix
15 -- any warnings in the module. See
16 -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
20 TcTyVar, TcKind, TcType, TcTauType, TcThetaType, TcTyVarSet,
22 --------------------------------
23 -- Creating new mutable type variables
25 newFlexiTyVarTy, -- Kind -> TcM TcType
26 newFlexiTyVarTys, -- Int -> Kind -> TcM [TcType]
27 newKindVar, newKindVars,
28 lookupTcTyVar, LookupTyVarResult(..),
29 newMetaTyVar, readMetaTyVar, writeMetaTyVar,
31 --------------------------------
32 -- Boxy type variables
33 newBoxyTyVar, newBoxyTyVars, newBoxyTyVarTys, readFilledBox,
35 --------------------------------
36 -- Creating new coercion variables
37 newCoVars, newMetaCoVar,
39 --------------------------------
41 tcInstTyVar, tcInstType, tcInstTyVars, tcInstBoxyTyVar,
42 tcInstSigTyVars, zonkSigTyVar,
43 tcInstSkolTyVar, tcInstSkolTyVars, tcInstSkolType,
44 tcSkolSigType, tcSkolSigTyVars, occurCheckErr,
46 --------------------------------
47 -- Checking type validity
48 Rank, UserTypeCtxt(..), checkValidType,
49 SourceTyCtxt(..), checkValidTheta, checkFreeness,
50 checkValidInstHead, checkValidInstance,
51 checkInstTermination, checkValidTypeInst, checkTyFamFreeness,
52 checkUpdateMeta, updateMeta, checkTauTvUpdate, fillBoxWithTau, unifyKindCtxt,
53 unifyKindMisMatch, validDerivPred, arityErr, notMonoType, notMonoArgs,
55 --------------------------------
57 zonkType, zonkTcPredType,
58 zonkTcTyVar, zonkTcTyVars, zonkTcTyVarsAndFV,
59 zonkQuantifiedTyVar, zonkQuantifiedTyVars,
60 zonkTcType, zonkTcTypes, zonkTcClassConstraints, zonkTcThetaType,
61 zonkTcKindToKind, zonkTcKind, zonkTopTyVar,
63 readKindVar, writeKindVar
66 #include "HsVersions.h"
78 import TcRnMonad -- TcType, amongst others
91 import Control.Monad ( when, unless )
92 import Data.List ( (\\) )
96 %************************************************************************
98 Instantiation in general
100 %************************************************************************
103 tcInstType :: ([TyVar] -> TcM [TcTyVar]) -- How to instantiate the type variables
104 -> TcType -- Type to instantiate
105 -> TcM ([TcTyVar], TcThetaType, TcType) -- Result
106 tcInstType inst_tyvars ty
107 = case tcSplitForAllTys ty of
108 ([], rho) -> let -- There may be overloading despite no type variables;
109 -- (?x :: Int) => Int -> Int
110 (theta, tau) = tcSplitPhiTy rho
112 return ([], theta, tau)
114 (tyvars, rho) -> do { tyvars' <- inst_tyvars tyvars
116 ; let tenv = zipTopTvSubst tyvars (mkTyVarTys tyvars')
117 -- Either the tyvars are freshly made, by inst_tyvars,
118 -- or (in the call from tcSkolSigType) any nested foralls
119 -- have different binders. Either way, zipTopTvSubst is ok
121 ; let (theta, tau) = tcSplitPhiTy (substTy tenv rho)
122 ; return (tyvars', theta, tau) }
126 %************************************************************************
130 %************************************************************************
132 Can't be in TcUnify, as we also need it in TcTyFuns.
136 -- False <=> the two args are (actual, expected) respectively
137 -- True <=> the two args are (expected, actual) respectively
139 checkUpdateMeta :: SwapFlag
140 -> TcTyVar -> IORef MetaDetails -> TcType -> TcM ()
141 -- Update tv1, which is flexi; occurs check is alrady done
142 -- The 'check' version does a kind check too
143 -- We do a sub-kind check here: we might unify (a b) with (c d)
144 -- where b::*->* and d::*; this should fail
146 checkUpdateMeta swapped tv1 ref1 ty2
147 = do { checkKinds swapped tv1 ty2
148 ; updateMeta tv1 ref1 ty2 }
150 updateMeta :: TcTyVar -> IORef MetaDetails -> TcType -> TcM ()
151 updateMeta tv1 ref1 ty2
152 = ASSERT( isMetaTyVar tv1 )
153 ASSERT( isBoxyTyVar tv1 || isTauTy ty2 )
154 do { ASSERTM2( do { details <- readMetaTyVar tv1; return (isFlexi details) }, ppr tv1 )
155 ; traceTc (text "updateMeta" <+> ppr tv1 <+> text ":=" <+> ppr ty2)
156 ; writeMutVar ref1 (Indirect ty2)
160 checkKinds swapped tv1 ty2
161 -- We're about to unify a type variable tv1 with a non-tyvar-type ty2.
162 -- ty2 has been zonked at this stage, which ensures that
163 -- its kind has as much boxity information visible as possible.
164 | tk2 `isSubKind` tk1 = returnM ()
167 -- Either the kinds aren't compatible
168 -- (can happen if we unify (a b) with (c d))
169 -- or we are unifying a lifted type variable with an
170 -- unlifted type: e.g. (id 3#) is illegal
171 = addErrCtxtM (unifyKindCtxt swapped tv1 ty2) $
172 unifyKindMisMatch k1 k2
174 (k1,k2) | swapped = (tk2,tk1)
175 | otherwise = (tk1,tk2)
180 checkTauTvUpdate :: TcTyVar -> TcType -> TcM (Maybe TcType)
181 -- (checkTauTvUpdate tv ty)
182 -- We are about to update the TauTv tv with ty.
183 -- Check (a) that tv doesn't occur in ty (occurs check)
184 -- (b) that ty is a monotype
185 -- Furthermore, in the interest of (b), if you find an
186 -- empty box (BoxTv that is Flexi), fill it in with a TauTv
188 -- We have three possible outcomes:
189 -- (1) Return the (non-boxy) type to update the type variable with,
190 -- [we know the update is ok!]
191 -- (2) return Nothing, or
192 -- [we cannot tell whether the update is ok right now]
194 -- [the update is definitely invalid]
195 -- We return Nothing in case the tv occurs in ty *under* a type family
196 -- application. In this case, we must not update tv (to avoid a cyclic type
197 -- term), but we also cannot fail claiming an infinite type. Given
199 -- type instance F Int = Int
202 -- This is perfectly reasonable, if we later get a ~ Int.
204 checkTauTvUpdate orig_tv orig_ty
205 = do { result <- go orig_ty
207 Right ty -> return $ Just ty
208 Left True -> return $ Nothing
209 Left False -> occurCheckErr (mkTyVarTy orig_tv) orig_ty
212 go :: TcType -> TcM (Either Bool TcType)
214 -- Right ty if everything is fine
215 -- Left True if orig_tv occurs in orig_ty, but under a type family app
216 -- Left False if orig_tv occurs in orig_ty (with no type family app)
217 -- It fails if it encounters a forall type, except as an argument for a
218 -- closed type synonym that expands to a tau type.
220 | isSynTyCon tc = go_syn tc tys
221 | otherwise = do { tys' <- mappM go tys
222 ; return $ occurs (TyConApp tc) tys' }
223 go (NoteTy _ ty2) = go ty2 -- Discard free-tyvar annotations
224 go (PredTy p) = do { p' <- go_pred p
225 ; return $ occurs1 PredTy p' }
226 go (FunTy arg res) = do { arg' <- go arg
228 ; return $ occurs2 FunTy arg' res' }
229 go (AppTy fun arg) = do { fun' <- go fun
231 ; return $ occurs2 mkAppTy fun' arg' }
232 -- NB the mkAppTy; we might have instantiated a
233 -- type variable to a type constructor, so we need
234 -- to pull the TyConApp to the top.
235 go (ForAllTy tv ty) = notMonoType orig_ty -- (b)
238 | orig_tv == tv = return $ Left False -- (a)
239 | isTcTyVar tv = go_tyvar tv (tcTyVarDetails tv)
240 | otherwise = return $ Right (TyVarTy tv)
241 -- Ordinary (non Tc) tyvars
242 -- occur inside quantified types
244 go_pred (ClassP c tys) = do { tys' <- mapM go tys
245 ; return $ occurs (ClassP c) tys' }
246 go_pred (IParam n ty) = do { ty' <- go ty
247 ; return $ occurs1 (IParam n) ty' }
248 go_pred (EqPred t1 t2) = do { t1' <- go t1
250 ; return $ occurs2 EqPred t1' t2' }
252 go_tyvar tv (SkolemTv _) = return $ Right (TyVarTy tv)
253 go_tyvar tv (MetaTv box ref)
254 = do { cts <- readMutVar ref
258 BoxTv -> do { ty <- fillBoxWithTau tv ref
259 ; return $ Right ty }
260 other -> return $ Right (TyVarTy tv)
263 -- go_syn is called for synonyms only
264 -- See Note [Type synonyms and the occur check]
266 | not (isTauTyCon tc)
267 = notMonoType orig_ty -- (b) again
269 = do { (msgs, mb_tys') <- tryTc (mapM go tys)
272 -- we had a type error => forall in type parameters
274 | isOpenTyCon tc -> notMonoArgs (TyConApp tc tys)
275 -- Synonym families must have monotype args
276 | otherwise -> go (expectJust "checkTauTvUpdate(1)"
277 (tcView (TyConApp tc tys)))
278 -- Try again, expanding the synonym
280 -- no type error, but need to test whether occurs check happend
282 case occurs id tys' of
284 | isOpenTyCon tc -> return $ Left True
285 -- Variable occured under type family application
286 | otherwise -> go (expectJust "checkTauTvUpdate(2)"
287 (tcView (TyConApp tc tys)))
288 -- Try again, expanding the synonym
289 Right raw_tys' -> return $ Right (TyConApp tc raw_tys')
290 -- Retain the synonym (the common case)
293 -- Left results (= occurrence of orig_ty) dominate and
294 -- (Left False) (= fatal occurrence) dominates over (Left True)
295 occurs :: ([a] -> b) -> [Either Bool a] -> Either Bool b
296 occurs c = either Left (Right . c) . foldr combine (Right [])
298 combine (Left famInst1) (Left famInst2) = Left (famInst1 && famInst2)
299 combine (Right _ ) (Left famInst) = Left famInst
300 combine (Left famInst) (Right _) = Left famInst
301 combine (Right arg) (Right args) = Right (arg:args)
303 occurs1 c x = occurs (\[x'] -> c x') [x]
304 occurs2 c x y = occurs (\[x', y'] -> c x' y') [x, y]
306 fillBoxWithTau :: BoxyTyVar -> IORef MetaDetails -> TcM TcType
307 -- (fillBoxWithTau tv ref) fills ref with a freshly allocated
308 -- tau-type meta-variable, whose print-name is the same as tv
309 -- Choosing the same name is good: when we instantiate a function
310 -- we allocate boxy tyvars with the same print-name as the quantified
311 -- tyvar; and then we often fill the box with a tau-tyvar, and again
312 -- we want to choose the same name.
313 fillBoxWithTau tv ref
314 = do { tv' <- tcInstTyVar tv -- Do not gratuitously forget
315 ; let tau = mkTyVarTy tv' -- name of the type variable
316 ; writeMutVar ref (Indirect tau)
320 Note [Type synonyms and the occur check]
322 Basically we want to update tv1 := ps_ty2
323 because ps_ty2 has type-synonym info, which improves later error messages
328 f :: (A a -> a -> ()) -> ()
334 In the application (p x), we try to match "t" with "A t". If we go
335 ahead and bind t to A t (= ps_ty2), we'll lead the type checker into
336 an infinite loop later.
337 But we should not reject the program, because A t = ().
338 Rather, we should bind t to () (= non_var_ty2).
342 Error mesages in case of kind mismatch.
345 unifyKindMisMatch ty1 ty2
346 = zonkTcKind ty1 `thenM` \ ty1' ->
347 zonkTcKind ty2 `thenM` \ ty2' ->
349 msg = hang (ptext SLIT("Couldn't match kind"))
350 2 (sep [quotes (ppr ty1'),
351 ptext SLIT("against"),
356 unifyKindCtxt swapped tv1 ty2 tidy_env -- not swapped => tv1 expected, ty2 inferred
357 -- tv1 and ty2 are zonked already
360 msg = (env2, ptext SLIT("When matching the kinds of") <+>
361 sep [quotes pp_expected <+> ptext SLIT("and"), quotes pp_actual])
363 (pp_expected, pp_actual) | swapped = (pp2, pp1)
364 | otherwise = (pp1, pp2)
365 (env1, tv1') = tidyOpenTyVar tidy_env tv1
366 (env2, ty2') = tidyOpenType env1 ty2
367 pp1 = ppr tv1' <+> dcolon <+> ppr (tyVarKind tv1)
368 pp2 = ppr ty2' <+> dcolon <+> ppr (typeKind ty2)
371 Error message for failure due to an occurs check.
374 occurCheckErr :: TcType -> TcType -> TcM a
375 occurCheckErr ty containingTy
376 = do { env0 <- tcInitTidyEnv
377 ; ty' <- zonkTcType ty
378 ; containingTy' <- zonkTcType containingTy
379 ; let (env1, tidy_ty1) = tidyOpenType env0 ty'
380 (env2, tidy_ty2) = tidyOpenType env1 containingTy'
381 extra = sep [ppr tidy_ty1, char '=', ppr tidy_ty2]
382 ; failWithTcM (env2, hang msg 2 extra) }
384 msg = ptext SLIT("Occurs check: cannot construct the infinite type:")
387 %************************************************************************
391 %************************************************************************
394 newCoVars :: [(TcType,TcType)] -> TcM [CoVar]
396 = do { us <- newUniqueSupply
397 ; return [ mkCoVar (mkSysTvName uniq FSLIT("co"))
399 | ((ty1,ty2), uniq) <- spec `zip` uniqsFromSupply us] }
401 newMetaCoVar :: TcType -> TcType -> TcM TcTyVar
402 newMetaCoVar ty1 ty2 = newMetaTyVar TauTv (mkCoKind ty1 ty2)
404 newKindVar :: TcM TcKind
405 newKindVar = do { uniq <- newUnique
406 ; ref <- newMutVar Flexi
407 ; return (mkTyVarTy (mkKindVar uniq ref)) }
409 newKindVars :: Int -> TcM [TcKind]
410 newKindVars n = mappM (\ _ -> newKindVar) (nOfThem n ())
414 %************************************************************************
416 SkolemTvs (immutable)
418 %************************************************************************
421 mkSkolTyVar :: Name -> Kind -> SkolemInfo -> TcTyVar
422 mkSkolTyVar name kind info = mkTcTyVar name kind (SkolemTv info)
424 tcSkolSigType :: SkolemInfo -> Type -> TcM ([TcTyVar], TcThetaType, TcType)
425 -- Instantiate a type signature with skolem constants, but
426 -- do *not* give them fresh names, because we want the name to
427 -- be in the type environment -- it is lexically scoped.
428 tcSkolSigType info ty = tcInstType (\tvs -> return (tcSkolSigTyVars info tvs)) ty
430 tcSkolSigTyVars :: SkolemInfo -> [TyVar] -> [TcTyVar]
431 -- Make skolem constants, but do *not* give them new names, as above
432 tcSkolSigTyVars info tyvars = [ mkSkolTyVar (tyVarName tv) (tyVarKind tv) info
435 tcInstSkolTyVar :: SkolemInfo -> Maybe SrcSpan -> TyVar -> TcM TcTyVar
436 -- Instantiate the tyvar, using
437 -- * the occ-name and kind of the supplied tyvar,
438 -- * the unique from the monad,
439 -- * the location either from the tyvar (mb_loc = Nothing)
440 -- or from mb_loc (Just loc)
441 tcInstSkolTyVar info mb_loc tyvar
442 = do { uniq <- newUnique
443 ; let old_name = tyVarName tyvar
444 kind = tyVarKind tyvar
445 loc = mb_loc `orElse` getSrcSpan old_name
446 new_name = mkInternalName uniq (nameOccName old_name) loc
447 ; return (mkSkolTyVar new_name kind info) }
449 tcInstSkolTyVars :: SkolemInfo -> [TyVar] -> TcM [TcTyVar]
450 -- Get the location from the monad
451 tcInstSkolTyVars info tyvars
452 = do { span <- getSrcSpanM
453 ; mapM (tcInstSkolTyVar info (Just span)) tyvars }
455 tcInstSkolType :: SkolemInfo -> TcType -> TcM ([TcTyVar], TcThetaType, TcType)
456 -- Instantiate a type with fresh skolem constants
457 -- Binding location comes from the monad
458 tcInstSkolType info ty = tcInstType (tcInstSkolTyVars info) ty
462 %************************************************************************
464 MetaTvs (meta type variables; mutable)
466 %************************************************************************
469 newMetaTyVar :: BoxInfo -> Kind -> TcM TcTyVar
470 -- Make a new meta tyvar out of thin air
471 newMetaTyVar box_info kind
472 = do { uniq <- newUnique
473 ; ref <- newMutVar Flexi
474 ; let name = mkSysTvName uniq fs
475 fs = case box_info of
478 SigTv _ -> FSLIT("a")
479 -- We give BoxTv and TauTv the same string, because
480 -- otherwise we get user-visible differences in error
481 -- messages, which are confusing. If you want to see
482 -- the box_info of each tyvar, use -dppr-debug
483 ; return (mkTcTyVar name kind (MetaTv box_info ref)) }
485 instMetaTyVar :: BoxInfo -> TyVar -> TcM TcTyVar
486 -- Make a new meta tyvar whose Name and Kind
487 -- come from an existing TyVar
488 instMetaTyVar box_info tyvar
489 = do { uniq <- newUnique
490 ; ref <- newMutVar Flexi
491 ; let name = setNameUnique (tyVarName tyvar) uniq
492 kind = tyVarKind tyvar
493 ; return (mkTcTyVar name kind (MetaTv box_info ref)) }
495 readMetaTyVar :: TyVar -> TcM MetaDetails
496 readMetaTyVar tyvar = ASSERT2( isMetaTyVar tyvar, ppr tyvar )
497 readMutVar (metaTvRef tyvar)
499 writeMetaTyVar :: TcTyVar -> TcType -> TcM ()
501 writeMetaTyVar tyvar ty = writeMutVar (metaTvRef tyvar) (Indirect ty)
503 writeMetaTyVar tyvar ty
504 | not (isMetaTyVar tyvar)
505 = pprTrace "writeMetaTyVar" (ppr tyvar) $
509 = ASSERT( isMetaTyVar tyvar )
510 -- TOM: It should also work for coercions
511 -- ASSERT2( k2 `isSubKind` k1, (ppr tyvar <+> ppr k1) $$ (ppr ty <+> ppr k2) )
512 do { ASSERTM2( do { details <- readMetaTyVar tyvar; return (isFlexi details) }, ppr tyvar )
513 ; writeMutVar (metaTvRef tyvar) (Indirect ty) }
521 %************************************************************************
525 %************************************************************************
528 newFlexiTyVar :: Kind -> TcM TcTyVar
529 newFlexiTyVar kind = newMetaTyVar TauTv kind
531 newFlexiTyVarTy :: Kind -> TcM TcType
533 = newFlexiTyVar kind `thenM` \ tc_tyvar ->
534 returnM (TyVarTy tc_tyvar)
536 newFlexiTyVarTys :: Int -> Kind -> TcM [TcType]
537 newFlexiTyVarTys n kind = mappM newFlexiTyVarTy (nOfThem n kind)
539 tcInstTyVar :: TyVar -> TcM TcTyVar
540 -- Instantiate with a META type variable
541 tcInstTyVar tyvar = instMetaTyVar TauTv tyvar
543 tcInstTyVars :: [TyVar] -> TcM ([TcTyVar], [TcType], TvSubst)
544 -- Instantiate with META type variables
546 = do { tc_tvs <- mapM tcInstTyVar tyvars
547 ; let tys = mkTyVarTys tc_tvs
548 ; returnM (tc_tvs, tys, zipTopTvSubst tyvars tys) }
549 -- Since the tyvars are freshly made,
550 -- they cannot possibly be captured by
551 -- any existing for-alls. Hence zipTopTvSubst
555 %************************************************************************
559 %************************************************************************
562 tcInstSigTyVars :: Bool -> SkolemInfo -> [TyVar] -> TcM [TcTyVar]
563 -- Instantiate with skolems or meta SigTvs; depending on use_skols
564 -- Always take location info from the supplied tyvars
565 tcInstSigTyVars use_skols skol_info tyvars
567 = mapM (tcInstSkolTyVar skol_info Nothing) tyvars
570 = mapM (instMetaTyVar (SigTv skol_info)) tyvars
572 zonkSigTyVar :: TcTyVar -> TcM TcTyVar
574 | isSkolemTyVar sig_tv
575 = return sig_tv -- Happens in the call in TcBinds.checkDistinctTyVars
577 = ASSERT( isSigTyVar sig_tv )
578 do { ty <- zonkTcTyVar sig_tv
579 ; return (tcGetTyVar "zonkSigTyVar" ty) }
580 -- 'ty' is bound to be a type variable, because SigTvs
581 -- can only be unified with type variables
585 %************************************************************************
589 %************************************************************************
592 newBoxyTyVar :: Kind -> TcM BoxyTyVar
593 newBoxyTyVar kind = newMetaTyVar BoxTv kind
595 newBoxyTyVars :: [Kind] -> TcM [BoxyTyVar]
596 newBoxyTyVars kinds = mapM newBoxyTyVar kinds
598 newBoxyTyVarTys :: [Kind] -> TcM [BoxyType]
599 newBoxyTyVarTys kinds = do { tvs <- mapM newBoxyTyVar kinds; return (mkTyVarTys tvs) }
601 readFilledBox :: BoxyTyVar -> TcM TcType
602 -- Read the contents of the box, which should be filled in by now
603 readFilledBox box_tv = ASSERT( isBoxyTyVar box_tv )
604 do { cts <- readMetaTyVar box_tv
606 Flexi -> pprPanic "readFilledBox" (ppr box_tv)
607 Indirect ty -> return ty }
609 tcInstBoxyTyVar :: TyVar -> TcM BoxyTyVar
610 -- Instantiate with a BOXY type variable
611 tcInstBoxyTyVar tyvar = instMetaTyVar BoxTv tyvar
615 %************************************************************************
617 \subsection{Putting and getting mutable type variables}
619 %************************************************************************
621 But it's more fun to short out indirections on the way: If this
622 version returns a TyVar, then that TyVar is unbound. If it returns
623 any other type, then there might be bound TyVars embedded inside it.
625 We return Nothing iff the original box was unbound.
628 data LookupTyVarResult -- The result of a lookupTcTyVar call
629 = DoneTv TcTyVarDetails -- SkolemTv or virgin MetaTv
632 lookupTcTyVar :: TcTyVar -> TcM LookupTyVarResult
634 = ASSERT2( isTcTyVar tyvar, ppr tyvar )
636 SkolemTv _ -> return (DoneTv details)
637 MetaTv _ ref -> do { meta_details <- readMutVar ref
638 ; case meta_details of
639 Indirect ty -> return (IndirectTv ty)
640 Flexi -> return (DoneTv details) }
642 details = tcTyVarDetails tyvar
645 -- gaw 2004 We aren't shorting anything out anymore, at least for now
647 | not (isTcTyVar tyvar)
648 = pprTrace "getTcTyVar" (ppr tyvar) $
649 returnM (Just (mkTyVarTy tyvar))
652 = ASSERT2( isTcTyVar tyvar, ppr tyvar )
653 readMetaTyVar tyvar `thenM` \ maybe_ty ->
655 Just ty -> short_out ty `thenM` \ ty' ->
656 writeMetaTyVar tyvar (Just ty') `thenM_`
659 Nothing -> returnM Nothing
661 short_out :: TcType -> TcM TcType
662 short_out ty@(TyVarTy tyvar)
663 | not (isTcTyVar tyvar)
667 = readMetaTyVar tyvar `thenM` \ maybe_ty ->
669 Just ty' -> short_out ty' `thenM` \ ty' ->
670 writeMetaTyVar tyvar (Just ty') `thenM_`
675 short_out other_ty = returnM other_ty
680 %************************************************************************
682 \subsection{Zonking -- the exernal interfaces}
684 %************************************************************************
686 ----------------- Type variables
689 zonkTcTyVars :: [TcTyVar] -> TcM [TcType]
690 zonkTcTyVars tyvars = mappM zonkTcTyVar tyvars
692 zonkTcTyVarsAndFV :: [TcTyVar] -> TcM TcTyVarSet
693 zonkTcTyVarsAndFV tyvars = mappM zonkTcTyVar tyvars `thenM` \ tys ->
694 returnM (tyVarsOfTypes tys)
696 zonkTcTyVar :: TcTyVar -> TcM TcType
697 zonkTcTyVar tyvar = ASSERT2( isTcTyVar tyvar, ppr tyvar)
698 zonk_tc_tyvar (\ tv -> returnM (TyVarTy tv)) tyvar
701 ----------------- Types
704 zonkTcType :: TcType -> TcM TcType
705 zonkTcType ty = zonkType (\ tv -> returnM (TyVarTy tv)) ty
707 zonkTcTypes :: [TcType] -> TcM [TcType]
708 zonkTcTypes tys = mappM zonkTcType tys
710 zonkTcClassConstraints cts = mappM zonk cts
711 where zonk (clas, tys)
712 = zonkTcTypes tys `thenM` \ new_tys ->
713 returnM (clas, new_tys)
715 zonkTcThetaType :: TcThetaType -> TcM TcThetaType
716 zonkTcThetaType theta = mappM zonkTcPredType theta
718 zonkTcPredType :: TcPredType -> TcM TcPredType
719 zonkTcPredType (ClassP c ts)
720 = zonkTcTypes ts `thenM` \ new_ts ->
721 returnM (ClassP c new_ts)
722 zonkTcPredType (IParam n t)
723 = zonkTcType t `thenM` \ new_t ->
724 returnM (IParam n new_t)
725 zonkTcPredType (EqPred t1 t2)
726 = zonkTcType t1 `thenM` \ new_t1 ->
727 zonkTcType t2 `thenM` \ new_t2 ->
728 returnM (EqPred new_t1 new_t2)
731 ------------------- These ...ToType, ...ToKind versions
732 are used at the end of type checking
735 zonkTopTyVar :: TcTyVar -> TcM TcTyVar
736 -- zonkTopTyVar is used, at the top level, on any un-instantiated meta type variables
737 -- to default the kind of ? and ?? etc to *. This is important to ensure that
738 -- instance declarations match. For example consider
739 -- instance Show (a->b)
740 -- foo x = show (\_ -> True)
741 -- Then we'll get a constraint (Show (p ->q)) where p has argTypeKind (printed ??),
742 -- and that won't match the typeKind (*) in the instance decl.
744 -- Because we are at top level, no further constraints are going to affect these
745 -- type variables, so it's time to do it by hand. However we aren't ready
746 -- to default them fully to () or whatever, because the type-class defaulting
747 -- rules have yet to run.
750 | k `eqKind` default_k = return tv
752 = do { tv' <- newFlexiTyVar default_k
753 ; writeMetaTyVar tv (mkTyVarTy tv')
757 default_k = defaultKind k
759 zonkQuantifiedTyVars :: [TcTyVar] -> TcM [TyVar]
760 zonkQuantifiedTyVars = mappM zonkQuantifiedTyVar
762 zonkQuantifiedTyVar :: TcTyVar -> TcM TyVar
763 -- zonkQuantifiedTyVar is applied to the a TcTyVar when quantifying over it.
765 -- The quantified type variables often include meta type variables
766 -- we want to freeze them into ordinary type variables, and
767 -- default their kind (e.g. from OpenTypeKind to TypeKind)
768 -- -- see notes with Kind.defaultKind
769 -- The meta tyvar is updated to point to the new regular TyVar. Now any
770 -- bound occurences of the original type variable will get zonked to
771 -- the immutable version.
773 -- We leave skolem TyVars alone; they are immutable.
774 zonkQuantifiedTyVar tv
775 | ASSERT( isTcTyVar tv )
776 isSkolemTyVar tv = return tv
777 -- It might be a skolem type variable,
778 -- for example from a user type signature
780 | otherwise -- It's a meta-type-variable
781 = do { details <- readMetaTyVar tv
783 -- Create the new, frozen, regular type variable
784 ; let final_kind = defaultKind (tyVarKind tv)
785 final_tv = mkTyVar (tyVarName tv) final_kind
787 -- Bind the meta tyvar to the new tyvar
789 Indirect ty -> WARN( True, ppr tv $$ ppr ty )
791 -- [Sept 04] I don't think this should happen
792 -- See note [Silly Type Synonym]
794 Flexi -> writeMetaTyVar tv (mkTyVarTy final_tv)
796 -- Return the new tyvar
800 [Silly Type Synonyms]
803 type C u a = u -- Note 'a' unused
805 foo :: (forall a. C u a -> C u a) -> u
809 bar = foo (\t -> t + t)
811 * From the (\t -> t+t) we get type {Num d} => d -> d
814 * Now unify with type of foo's arg, and we get:
815 {Num (C d a)} => C d a -> C d a
818 * Now abstract over the 'a', but float out the Num (C d a) constraint
819 because it does not 'really' mention a. (see exactTyVarsOfType)
820 The arg to foo becomes
823 * So we get a dict binding for Num (C d a), which is zonked to give
825 [Note Sept 04: now that we are zonking quantified type variables
826 on construction, the 'a' will be frozen as a regular tyvar on
827 quantification, so the floated dict will still have type (C d a).
828 Which renders this whole note moot; happily!]
830 * Then the /\a abstraction has a zonked 'a' in it.
832 All very silly. I think its harmless to ignore the problem. We'll end up with
833 a /\a in the final result but all the occurrences of a will be zonked to ()
836 %************************************************************************
838 \subsection{Zonking -- the main work-horses: zonkType, zonkTyVar}
840 %* For internal use only! *
842 %************************************************************************
845 -- For unbound, mutable tyvars, zonkType uses the function given to it
846 -- For tyvars bound at a for-all, zonkType zonks them to an immutable
847 -- type variable and zonks the kind too
849 zonkType :: (TcTyVar -> TcM Type) -- What to do with unbound mutable type variables
850 -- see zonkTcType, and zonkTcTypeToType
853 zonkType unbound_var_fn ty
856 go (NoteTy _ ty2) = go ty2 -- Discard free-tyvar annotations
858 go (TyConApp tc tys) = mappM go tys `thenM` \ tys' ->
859 returnM (TyConApp tc tys')
861 go (PredTy p) = go_pred p `thenM` \ p' ->
864 go (FunTy arg res) = go arg `thenM` \ arg' ->
865 go res `thenM` \ res' ->
866 returnM (FunTy arg' res')
868 go (AppTy fun arg) = go fun `thenM` \ fun' ->
869 go arg `thenM` \ arg' ->
870 returnM (mkAppTy fun' arg')
871 -- NB the mkAppTy; we might have instantiated a
872 -- type variable to a type constructor, so we need
873 -- to pull the TyConApp to the top.
875 -- The two interesting cases!
876 go (TyVarTy tyvar) | isTcTyVar tyvar = zonk_tc_tyvar unbound_var_fn tyvar
877 | otherwise = return (TyVarTy tyvar)
878 -- Ordinary (non Tc) tyvars occur inside quantified types
880 go (ForAllTy tyvar ty) = ASSERT( isImmutableTyVar tyvar )
881 go ty `thenM` \ ty' ->
882 returnM (ForAllTy tyvar ty')
884 go_pred (ClassP c tys) = mappM go tys `thenM` \ tys' ->
885 returnM (ClassP c tys')
886 go_pred (IParam n ty) = go ty `thenM` \ ty' ->
887 returnM (IParam n ty')
888 go_pred (EqPred ty1 ty2) = go ty1 `thenM` \ ty1' ->
889 go ty2 `thenM` \ ty2' ->
890 returnM (EqPred ty1' ty2')
892 zonk_tc_tyvar :: (TcTyVar -> TcM Type) -- What to do for an unbound mutable variable
893 -> TcTyVar -> TcM TcType
894 zonk_tc_tyvar unbound_var_fn tyvar
895 | not (isMetaTyVar tyvar) -- Skolems
896 = returnM (TyVarTy tyvar)
898 | otherwise -- Mutables
899 = do { cts <- readMetaTyVar tyvar
901 Flexi -> unbound_var_fn tyvar -- Unbound meta type variable
902 Indirect ty -> zonkType unbound_var_fn ty }
907 %************************************************************************
911 %************************************************************************
914 readKindVar :: KindVar -> TcM (MetaDetails)
915 writeKindVar :: KindVar -> TcKind -> TcM ()
916 readKindVar kv = readMutVar (kindVarRef kv)
917 writeKindVar kv val = writeMutVar (kindVarRef kv) (Indirect val)
920 zonkTcKind :: TcKind -> TcM TcKind
921 zonkTcKind k = zonkTcType k
924 zonkTcKindToKind :: TcKind -> TcM Kind
925 -- When zonking a TcKind to a kind, we need to instantiate kind variables,
926 -- Haskell specifies that * is to be used, so we follow that.
927 zonkTcKindToKind k = zonkType (\ _ -> return liftedTypeKind) k
930 %************************************************************************
932 \subsection{Checking a user type}
934 %************************************************************************
936 When dealing with a user-written type, we first translate it from an HsType
937 to a Type, performing kind checking, and then check various things that should
938 be true about it. We don't want to perform these checks at the same time
939 as the initial translation because (a) they are unnecessary for interface-file
940 types and (b) when checking a mutually recursive group of type and class decls,
941 we can't "look" at the tycons/classes yet. Also, the checks are are rather
942 diverse, and used to really mess up the other code.
944 One thing we check for is 'rank'.
946 Rank 0: monotypes (no foralls)
947 Rank 1: foralls at the front only, Rank 0 inside
948 Rank 2: foralls at the front, Rank 1 on left of fn arrow,
950 basic ::= tyvar | T basic ... basic
952 r2 ::= forall tvs. cxt => r2a
953 r2a ::= r1 -> r2a | basic
954 r1 ::= forall tvs. cxt => r0
955 r0 ::= r0 -> r0 | basic
957 Another thing is to check that type synonyms are saturated.
958 This might not necessarily show up in kind checking.
960 data T k = MkT (k Int)
965 checkValidType :: UserTypeCtxt -> Type -> TcM ()
966 -- Checks that the type is valid for the given context
967 checkValidType ctxt ty
968 = traceTc (text "checkValidType" <+> ppr ty) `thenM_`
969 doptM Opt_UnboxedTuples `thenM` \ unboxed ->
970 doptM Opt_Rank2Types `thenM` \ rank2 ->
971 doptM Opt_RankNTypes `thenM` \ rankn ->
972 doptM Opt_PolymorphicComponents `thenM` \ polycomp ->
974 rank | rankn = Arbitrary
977 = case ctxt of -- Haskell 98
979 LamPatSigCtxt -> Rank 0
980 BindPatSigCtxt -> Rank 0
981 DefaultDeclCtxt-> Rank 0
983 TySynCtxt _ -> Rank 0
984 ExprSigCtxt -> Rank 1
985 FunSigCtxt _ -> Rank 1
986 ConArgCtxt _ -> if polycomp
988 -- We are given the type of the entire
989 -- constructor, hence rank 1
991 ForSigCtxt _ -> Rank 1
992 SpecInstCtxt -> Rank 1
994 actual_kind = typeKind ty
996 kind_ok = case ctxt of
997 TySynCtxt _ -> True -- Any kind will do
998 ResSigCtxt -> isSubOpenTypeKind actual_kind
999 ExprSigCtxt -> isSubOpenTypeKind actual_kind
1000 GenPatCtxt -> isLiftedTypeKind actual_kind
1001 ForSigCtxt _ -> isLiftedTypeKind actual_kind
1002 other -> isSubArgTypeKind actual_kind
1004 ubx_tup = case ctxt of
1005 TySynCtxt _ | unboxed -> UT_Ok
1006 ExprSigCtxt | unboxed -> UT_Ok
1009 -- Check that the thing has kind Type, and is lifted if necessary
1010 checkTc kind_ok (kindErr actual_kind) `thenM_`
1012 -- Check the internal validity of the type itself
1013 check_poly_type rank ubx_tup ty `thenM_`
1015 traceTc (text "checkValidType done" <+> ppr ty)
1020 data Rank = Rank Int | Arbitrary
1022 decRank :: Rank -> Rank
1023 decRank Arbitrary = Arbitrary
1024 decRank (Rank n) = Rank (n-1)
1026 ----------------------------------------
1027 data UbxTupFlag = UT_Ok | UT_NotOk
1028 -- The "Ok" version means "ok if -fglasgow-exts is on"
1030 ----------------------------------------
1031 check_poly_type :: Rank -> UbxTupFlag -> Type -> TcM ()
1032 check_poly_type (Rank 0) ubx_tup ty
1033 = check_tau_type (Rank 0) ubx_tup ty
1035 check_poly_type rank ubx_tup ty
1036 | null tvs && null theta
1037 = check_tau_type rank ubx_tup ty
1039 = do { check_valid_theta SigmaCtxt theta
1040 ; check_poly_type rank ubx_tup tau -- Allow foralls to right of arrow
1041 ; checkFreeness tvs theta
1042 ; checkAmbiguity tvs theta (tyVarsOfType tau) }
1044 (tvs, theta, tau) = tcSplitSigmaTy ty
1046 ----------------------------------------
1047 check_arg_type :: Type -> TcM ()
1048 -- The sort of type that can instantiate a type variable,
1049 -- or be the argument of a type constructor.
1050 -- Not an unboxed tuple, but now *can* be a forall (since impredicativity)
1051 -- Other unboxed types are very occasionally allowed as type
1052 -- arguments depending on the kind of the type constructor
1054 -- For example, we want to reject things like:
1056 -- instance Ord a => Ord (forall s. T s a)
1058 -- g :: T s (forall b.b)
1060 -- NB: unboxed tuples can have polymorphic or unboxed args.
1061 -- This happens in the workers for functions returning
1062 -- product types with polymorphic components.
1063 -- But not in user code.
1064 -- Anyway, they are dealt with by a special case in check_tau_type
1067 = check_poly_type Arbitrary UT_NotOk ty `thenM_`
1068 checkTc (not (isUnLiftedType ty)) (unliftedArgErr ty)
1070 ----------------------------------------
1071 check_tau_type :: Rank -> UbxTupFlag -> Type -> TcM ()
1072 -- Rank is allowed rank for function args
1073 -- No foralls otherwise
1075 check_tau_type rank ubx_tup ty@(ForAllTy _ _) = failWithTc (forAllTyErr ty)
1076 check_tau_type rank ubx_tup ty@(FunTy (PredTy _) _) = failWithTc (forAllTyErr ty)
1077 -- Reject e.g. (Maybe (?x::Int => Int)), with a decent error message
1079 -- Naked PredTys don't usually show up, but they can as a result of
1080 -- {-# SPECIALISE instance Ord Char #-}
1081 -- The Right Thing would be to fix the way that SPECIALISE instance pragmas
1082 -- are handled, but the quick thing is just to permit PredTys here.
1083 check_tau_type rank ubx_tup (PredTy sty) = getDOpts `thenM` \ dflags ->
1084 check_pred_ty dflags TypeCtxt sty
1086 check_tau_type rank ubx_tup (TyVarTy _) = returnM ()
1087 check_tau_type rank ubx_tup ty@(FunTy arg_ty res_ty)
1088 = check_poly_type (decRank rank) UT_NotOk arg_ty `thenM_`
1089 check_poly_type rank UT_Ok res_ty
1091 check_tau_type rank ubx_tup (AppTy ty1 ty2)
1092 = check_arg_type ty1 `thenM_` check_arg_type ty2
1094 check_tau_type rank ubx_tup (NoteTy other_note ty)
1095 = check_tau_type rank ubx_tup ty
1097 check_tau_type rank ubx_tup ty@(TyConApp tc tys)
1099 = do { -- Check that the synonym has enough args
1100 -- This applies equally to open and closed synonyms
1101 -- It's OK to have an *over-applied* type synonym
1102 -- data Tree a b = ...
1103 -- type Foo a = Tree [a]
1104 -- f :: Foo a b -> ...
1105 checkTc (tyConArity tc <= length tys) arity_msg
1107 -- See Note [Liberal type synonyms]
1108 ; liberal <- doptM Opt_LiberalTypeSynonyms
1109 ; if not liberal || isOpenSynTyCon tc then
1110 -- For H98 and synonym families, do check the type args
1111 mappM_ check_arg_type tys
1113 else -- In the liberal case (only for closed syns), expand then check
1115 Just ty' -> check_tau_type rank ubx_tup ty'
1116 Nothing -> pprPanic "check_tau_type" (ppr ty)
1119 | isUnboxedTupleTyCon tc
1120 = doptM Opt_UnboxedTuples `thenM` \ ub_tuples_allowed ->
1121 checkTc (ubx_tup_ok ub_tuples_allowed) ubx_tup_msg `thenM_`
1122 mappM_ (check_tau_type (Rank 0) UT_Ok) tys
1123 -- Args are allowed to be unlifted, or
1124 -- more unboxed tuples, so can't use check_arg_ty
1127 = mappM_ check_arg_type tys
1130 ubx_tup_ok ub_tuples_allowed = case ubx_tup of { UT_Ok -> ub_tuples_allowed; other -> False }
1133 tc_arity = tyConArity tc
1135 arity_msg = arityErr "Type synonym" (tyConName tc) tc_arity n_args
1136 ubx_tup_msg = ubxArgTyErr ty
1138 ----------------------------------------
1139 forAllTyErr ty = ptext SLIT("Illegal polymorphic or qualified type:") <+> ppr ty
1140 unliftedArgErr ty = ptext SLIT("Illegal unlifted type argument:") <+> ppr ty
1141 ubxArgTyErr ty = ptext SLIT("Illegal unboxed tuple type as function argument:") <+> ppr ty
1142 kindErr kind = ptext SLIT("Expecting an ordinary type, but found a type of kind") <+> ppr kind
1145 Note [Liberal type synonyms]
1146 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1147 If -XLiberalTypeSynonyms is on, expand closed type synonyms *before*
1148 doing validity checking. This allows us to instantiate a synonym defn
1149 with a for-all type, or with a partially-applied type synonym.
1153 Here, T is partially applied, so it's illegal in H98. But if you
1154 expand S first, then T we get just
1158 IMPORTANT: suppose T is a type synonym. Then we must do validity
1159 checking on an appliation (T ty1 ty2)
1161 *either* before expansion (i.e. check ty1, ty2)
1162 *or* after expansion (i.e. expand T ty1 ty2, and then check)
1165 If we do both, we get exponential behaviour!!
1167 data TIACons1 i r c = c i ::: r c
1168 type TIACons2 t x = TIACons1 t (TIACons1 t x)
1169 type TIACons3 t x = TIACons2 t (TIACons1 t x)
1170 type TIACons4 t x = TIACons2 t (TIACons2 t x)
1171 type TIACons7 t x = TIACons4 t (TIACons3 t x)
1174 %************************************************************************
1176 \subsection{Checking a theta or source type}
1178 %************************************************************************
1181 -- Enumerate the contexts in which a "source type", <S>, can occur
1185 -- or (N a) where N is a newtype
1188 = ClassSCCtxt Name -- Superclasses of clas
1189 -- class <S> => C a where ...
1190 | SigmaCtxt -- Theta part of a normal for-all type
1191 -- f :: <S> => a -> a
1192 | DataTyCtxt Name -- Theta part of a data decl
1193 -- data <S> => T a = MkT a
1194 | TypeCtxt -- Source type in an ordinary type
1196 | InstThetaCtxt -- Context of an instance decl
1197 -- instance <S> => C [a] where ...
1199 pprSourceTyCtxt (ClassSCCtxt c) = ptext SLIT("the super-classes of class") <+> quotes (ppr c)
1200 pprSourceTyCtxt SigmaCtxt = ptext SLIT("the context of a polymorphic type")
1201 pprSourceTyCtxt (DataTyCtxt tc) = ptext SLIT("the context of the data type declaration for") <+> quotes (ppr tc)
1202 pprSourceTyCtxt InstThetaCtxt = ptext SLIT("the context of an instance declaration")
1203 pprSourceTyCtxt TypeCtxt = ptext SLIT("the context of a type")
1207 checkValidTheta :: SourceTyCtxt -> ThetaType -> TcM ()
1208 checkValidTheta ctxt theta
1209 = addErrCtxt (checkThetaCtxt ctxt theta) (check_valid_theta ctxt theta)
1211 -------------------------
1212 check_valid_theta ctxt []
1214 check_valid_theta ctxt theta
1215 = getDOpts `thenM` \ dflags ->
1216 warnTc (notNull dups) (dupPredWarn dups) `thenM_`
1217 mappM_ (check_pred_ty dflags ctxt) theta
1219 (_,dups) = removeDups tcCmpPred theta
1221 -------------------------
1222 check_pred_ty :: DynFlags -> SourceTyCtxt -> PredType -> TcM ()
1223 check_pred_ty dflags ctxt pred@(ClassP cls tys)
1224 = do { -- Class predicates are valid in all contexts
1225 ; checkTc (arity == n_tys) arity_err
1227 -- Check the form of the argument types
1228 ; mappM_ check_arg_type tys
1229 ; checkTc (check_class_pred_tys dflags ctxt tys)
1230 (predTyVarErr pred $$ how_to_allow)
1233 class_name = className cls
1234 arity = classArity cls
1236 arity_err = arityErr "Class" class_name arity n_tys
1237 how_to_allow = parens (ptext SLIT("Use -XFlexibleContexts to permit this"))
1239 check_pred_ty dflags ctxt pred@(EqPred ty1 ty2)
1240 = do { -- Equational constraints are valid in all contexts if type
1241 -- families are permitted
1242 ; checkTc (dopt Opt_TypeFamilies dflags) (eqPredTyErr pred)
1244 -- Check the form of the argument types
1245 ; check_eq_arg_type ty1
1246 ; check_eq_arg_type ty2
1249 check_eq_arg_type = check_poly_type (Rank 0) UT_NotOk
1251 check_pred_ty dflags SigmaCtxt (IParam _ ty) = check_arg_type ty
1252 -- Implicit parameters only allowed in type
1253 -- signatures; not in instance decls, superclasses etc
1254 -- The reason for not allowing implicit params in instances is a bit
1256 -- If we allowed instance (?x::Int, Eq a) => Foo [a] where ...
1257 -- then when we saw (e :: (?x::Int) => t) it would be unclear how to
1258 -- discharge all the potential usas of the ?x in e. For example, a
1259 -- constraint Foo [Int] might come out of e,and applying the
1260 -- instance decl would show up two uses of ?x.
1263 check_pred_ty dflags ctxt sty = failWithTc (badPredTyErr sty)
1265 -------------------------
1266 check_class_pred_tys :: DynFlags -> SourceTyCtxt -> [Type] -> Bool
1267 check_class_pred_tys dflags ctxt tys
1269 TypeCtxt -> True -- {-# SPECIALISE instance Eq (T Int) #-} is fine
1270 InstThetaCtxt -> flexible_contexts || undecidable_ok || all tcIsTyVarTy tys
1271 -- Further checks on head and theta in
1272 -- checkInstTermination
1273 other -> flexible_contexts || all tyvar_head tys
1275 flexible_contexts = dopt Opt_FlexibleContexts dflags
1276 undecidable_ok = dopt Opt_UndecidableInstances dflags
1278 -------------------------
1279 tyvar_head ty -- Haskell 98 allows predicates of form
1280 | tcIsTyVarTy ty = True -- C (a ty1 .. tyn)
1281 | otherwise -- where a is a type variable
1282 = case tcSplitAppTy_maybe ty of
1283 Just (ty, _) -> tyvar_head ty
1290 is ambiguous if P contains generic variables
1291 (i.e. one of the Vs) that are not mentioned in tau
1293 However, we need to take account of functional dependencies
1294 when we speak of 'mentioned in tau'. Example:
1295 class C a b | a -> b where ...
1297 forall x y. (C x y) => x
1298 is not ambiguous because x is mentioned and x determines y
1300 NB; the ambiguity check is only used for *user* types, not for types
1301 coming from inteface files. The latter can legitimately have
1302 ambiguous types. Example
1304 class S a where s :: a -> (Int,Int)
1305 instance S Char where s _ = (1,1)
1306 f:: S a => [a] -> Int -> (Int,Int)
1307 f (_::[a]) x = (a*x,b)
1308 where (a,b) = s (undefined::a)
1310 Here the worker for f gets the type
1311 fw :: forall a. S a => Int -> (# Int, Int #)
1313 If the list of tv_names is empty, we have a monotype, and then we
1314 don't need to check for ambiguity either, because the test can't fail
1319 checkAmbiguity :: [TyVar] -> ThetaType -> TyVarSet -> TcM ()
1320 checkAmbiguity forall_tyvars theta tau_tyvars
1321 = mappM_ complain (filter is_ambig theta)
1323 complain pred = addErrTc (ambigErr pred)
1324 extended_tau_vars = grow theta tau_tyvars
1326 -- See Note [Implicit parameters and ambiguity] in TcSimplify
1327 is_ambig pred = isClassPred pred &&
1328 any ambig_var (varSetElems (tyVarsOfPred pred))
1330 ambig_var ct_var = (ct_var `elem` forall_tyvars) &&
1331 not (ct_var `elemVarSet` extended_tau_vars)
1334 = sep [ptext SLIT("Ambiguous constraint") <+> quotes (pprPred pred),
1335 nest 4 (ptext SLIT("At least one of the forall'd type variables mentioned by the constraint") $$
1336 ptext SLIT("must be reachable from the type after the '=>'"))]
1339 In addition, GHC insists that at least one type variable
1340 in each constraint is in V. So we disallow a type like
1341 forall a. Eq b => b -> b
1342 even in a scope where b is in scope.
1345 checkFreeness forall_tyvars theta
1346 = do { flexible_contexts <- doptM Opt_FlexibleContexts
1347 ; unless flexible_contexts $ mappM_ complain (filter is_free theta) }
1349 is_free pred = not (isIPPred pred)
1350 && not (any bound_var (varSetElems (tyVarsOfPred pred)))
1351 bound_var ct_var = ct_var `elem` forall_tyvars
1352 complain pred = addErrTc (freeErr pred)
1355 = sep [ ptext SLIT("All of the type variables in the constraint") <+>
1356 quotes (pprPred pred)
1357 , ptext SLIT("are already in scope") <+>
1358 ptext SLIT("(at least one must be universally quantified here)")
1360 ptext SLIT("(Use -XFlexibleContexts to lift this restriction)")
1365 checkThetaCtxt ctxt theta
1366 = vcat [ptext SLIT("In the context:") <+> pprTheta theta,
1367 ptext SLIT("While checking") <+> pprSourceTyCtxt ctxt ]
1369 badPredTyErr sty = ptext SLIT("Illegal constraint") <+> pprPred sty
1370 eqPredTyErr sty = ptext SLIT("Illegal equational constraint") <+> pprPred sty
1372 parens (ptext SLIT("Use -XTypeFamilies to permit this"))
1373 predTyVarErr pred = sep [ptext SLIT("Non type-variable argument"),
1374 nest 2 (ptext SLIT("in the constraint:") <+> pprPred pred)]
1375 dupPredWarn dups = ptext SLIT("Duplicate constraint(s):") <+> pprWithCommas pprPred (map head dups)
1377 arityErr kind name n m
1378 = hsep [ text kind, quotes (ppr name), ptext SLIT("should have"),
1379 n_arguments <> comma, text "but has been given", int m]
1381 n_arguments | n == 0 = ptext SLIT("no arguments")
1382 | n == 1 = ptext SLIT("1 argument")
1383 | True = hsep [int n, ptext SLIT("arguments")]
1387 = do { ty' <- zonkTcType ty
1388 ; env0 <- tcInitTidyEnv
1389 ; let (env1, tidy_ty) = tidyOpenType env0 ty'
1390 msg = ptext SLIT("Cannot match a monotype with") <+> quotes (ppr tidy_ty)
1391 ; failWithTcM (env1, msg) }
1394 = do { ty' <- zonkTcType ty
1395 ; env0 <- tcInitTidyEnv
1396 ; let (env1, tidy_ty) = tidyOpenType env0 ty'
1397 msg = ptext SLIT("Arguments of type synonym families must be monotypes") <+> quotes (ppr tidy_ty)
1398 ; failWithTcM (env1, msg) }
1402 %************************************************************************
1404 \subsection{Checking for a decent instance head type}
1406 %************************************************************************
1408 @checkValidInstHead@ checks the type {\em and} its syntactic constraints:
1409 it must normally look like: @instance Foo (Tycon a b c ...) ...@
1411 The exceptions to this syntactic checking: (1)~if the @GlasgowExts@
1412 flag is on, or (2)~the instance is imported (they must have been
1413 compiled elsewhere). In these cases, we let them go through anyway.
1415 We can also have instances for functions: @instance Foo (a -> b) ...@.
1418 checkValidInstHead :: Type -> TcM (Class, [TcType])
1420 checkValidInstHead ty -- Should be a source type
1421 = case tcSplitPredTy_maybe ty of {
1422 Nothing -> failWithTc (instTypeErr (ppr ty) empty) ;
1425 case getClassPredTys_maybe pred of {
1426 Nothing -> failWithTc (instTypeErr (pprPred pred) empty) ;
1429 getDOpts `thenM` \ dflags ->
1430 mappM_ check_arg_type tys `thenM_`
1431 check_inst_head dflags clas tys `thenM_`
1435 check_inst_head dflags clas tys
1436 -- If GlasgowExts then check at least one isn't a type variable
1437 = do checkTc (dopt Opt_TypeSynonymInstances dflags ||
1438 all tcInstHeadTyNotSynonym tys)
1439 (instTypeErr (pprClassPred clas tys) head_type_synonym_msg)
1440 checkTc (dopt Opt_FlexibleInstances dflags ||
1441 all tcInstHeadTyAppAllTyVars tys)
1442 (instTypeErr (pprClassPred clas tys) head_type_args_tyvars_msg)
1443 checkTc (dopt Opt_MultiParamTypeClasses dflags ||
1445 (instTypeErr (pprClassPred clas tys) head_one_type_msg)
1448 head_type_synonym_msg = parens (
1449 text "All instance types must be of the form (T t1 ... tn)" $$
1450 text "where T is not a synonym." $$
1451 text "Use -XTypeSynonymInstances if you want to disable this.")
1453 head_type_args_tyvars_msg = parens (
1454 text "All instance types must be of the form (T a1 ... an)" $$
1455 text "where a1 ... an are distinct type *variables*" $$
1456 text "Use -XFlexibleInstances if you want to disable this.")
1458 head_one_type_msg = parens (
1459 text "Only one type can be given in an instance head." $$
1460 text "Use -XMultiParamTypeClasses if you want to allow more.")
1462 -- For now, I only allow tau-types (not polytypes) in
1463 -- the head of an instance decl.
1464 -- E.g. instance C (forall a. a->a) is rejected
1465 -- One could imagine generalising that, but I'm not sure
1466 -- what all the consequences might be
1467 check_one ty = do { check_tau_type (Rank 0) UT_NotOk ty
1468 ; checkTc (not (isUnLiftedType ty)) (unliftedArgErr ty) }
1470 instTypeErr pp_ty msg
1471 = sep [ptext SLIT("Illegal instance declaration for") <+> quotes pp_ty,
1476 %************************************************************************
1478 \subsection{Checking instance for termination}
1480 %************************************************************************
1484 checkValidInstance :: [TyVar] -> ThetaType -> Class -> [TcType] -> TcM ()
1485 checkValidInstance tyvars theta clas inst_tys
1486 = do { undecidable_ok <- doptM Opt_UndecidableInstances
1488 ; checkValidTheta InstThetaCtxt theta
1489 ; checkAmbiguity tyvars theta (tyVarsOfTypes inst_tys)
1491 -- Check that instance inference will terminate (if we care)
1492 -- For Haskell 98 this will already have been done by checkValidTheta,
1493 -- but as we may be using other extensions we need to check.
1494 ; unless undecidable_ok $
1495 mapM_ addErrTc (checkInstTermination inst_tys theta)
1497 -- The Coverage Condition
1498 ; checkTc (undecidable_ok || checkInstCoverage clas inst_tys)
1499 (instTypeErr (pprClassPred clas inst_tys) msg)
1502 msg = parens (vcat [ptext SLIT("the Coverage Condition fails for one of the functional dependencies;"),
1506 Termination test: the so-called "Paterson conditions" (see Section 5 of
1507 "Understanding functionsl dependencies via Constraint Handling Rules,
1510 We check that each assertion in the context satisfies:
1511 (1) no variable has more occurrences in the assertion than in the head, and
1512 (2) the assertion has fewer constructors and variables (taken together
1513 and counting repetitions) than the head.
1514 This is only needed with -fglasgow-exts, as Haskell 98 restrictions
1515 (which have already been checked) guarantee termination.
1517 The underlying idea is that
1519 for any ground substitution, each assertion in the
1520 context has fewer type constructors than the head.
1524 checkInstTermination :: [TcType] -> ThetaType -> [Message]
1525 checkInstTermination tys theta
1526 = mapCatMaybes check theta
1529 size = sizeTypes tys
1531 | not (null (fvPred pred \\ fvs))
1532 = Just (predUndecErr pred nomoreMsg $$ parens undecidableMsg)
1533 | sizePred pred >= size
1534 = Just (predUndecErr pred smallerMsg $$ parens undecidableMsg)
1538 predUndecErr pred msg = sep [msg,
1539 nest 2 (ptext SLIT("in the constraint:") <+> pprPred pred)]
1541 nomoreMsg = ptext SLIT("Variable occurs more often in a constraint than in the instance head")
1542 smallerMsg = ptext SLIT("Constraint is no smaller than the instance head")
1543 undecidableMsg = ptext SLIT("Use -fallow-undecidable-instances to permit this")
1547 %************************************************************************
1549 Checking the context of a derived instance declaration
1551 %************************************************************************
1553 Note [Exotic derived instance contexts]
1554 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1555 In a 'derived' instance declaration, we *infer* the context. It's a
1556 bit unclear what rules we should apply for this; the Haskell report is
1557 silent. Obviously, constraints like (Eq a) are fine, but what about
1558 data T f a = MkT (f a) deriving( Eq )
1559 where we'd get an Eq (f a) constraint. That's probably fine too.
1561 One could go further: consider
1562 data T a b c = MkT (Foo a b c) deriving( Eq )
1563 instance (C Int a, Eq b, Eq c) => Eq (Foo a b c)
1565 Notice that this instance (just) satisfies the Paterson termination
1566 conditions. Then we *could* derive an instance decl like this:
1568 instance (C Int a, Eq b, Eq c) => Eq (T a b c)
1570 even though there is no instance for (C Int a), because there just
1571 *might* be an instance for, say, (C Int Bool) at a site where we
1572 need the equality instance for T's.
1574 However, this seems pretty exotic, and it's quite tricky to allow
1575 this, and yet give sensible error messages in the (much more common)
1576 case where we really want that instance decl for C.
1578 So for now we simply require that the derived instance context
1579 should have only type-variable constraints.
1581 Here is another example:
1582 data Fix f = In (f (Fix f)) deriving( Eq )
1583 Here, if we are prepared to allow -fallow-undecidable-instances we
1584 could derive the instance
1585 instance Eq (f (Fix f)) => Eq (Fix f)
1586 but this is so delicate that I don't think it should happen inside
1587 'deriving'. If you want this, write it yourself!
1589 NB: if you want to lift this condition, make sure you still meet the
1590 termination conditions! If not, the deriving mechanism generates
1591 larger and larger constraints. Example:
1593 data Seq a = Cons a (Seq (Succ a)) | Nil deriving Show
1595 Note the lack of a Show instance for Succ. First we'll generate
1596 instance (Show (Succ a), Show a) => Show (Seq a)
1598 instance (Show (Succ (Succ a)), Show (Succ a), Show a) => Show (Seq a)
1599 and so on. Instead we want to complain of no instance for (Show (Succ a)).
1603 Allow constraints which consist only of type variables, with no repeats.
1606 validDerivPred :: PredType -> Bool
1607 validDerivPred (ClassP cls tys) = hasNoDups fvs && sizeTypes tys == length fvs
1608 where fvs = fvTypes tys
1609 validDerivPred otehr = False
1612 %************************************************************************
1614 Checking type instance well-formedness and termination
1616 %************************************************************************
1619 -- Check that a "type instance" is well-formed (which includes decidability
1620 -- unless -fallow-undecidable-instances is given).
1622 checkValidTypeInst :: [Type] -> Type -> TcM ()
1623 checkValidTypeInst typats rhs
1624 = do { -- left-hand side contains no type family applications
1625 -- (vanilla synonyms are fine, though)
1626 ; mappM_ checkTyFamFreeness typats
1628 -- the right-hand side is a tau type
1629 ; checkTc (isTauTy rhs) $
1632 -- we have a decidable instance unless otherwise permitted
1633 ; undecidable_ok <- doptM Opt_UndecidableInstances
1634 ; unless undecidable_ok $
1635 mapM_ addErrTc (checkFamInst typats (tyFamInsts rhs))
1638 -- Make sure that each type family instance is
1639 -- (1) strictly smaller than the lhs,
1640 -- (2) mentions no type variable more often than the lhs, and
1641 -- (3) does not contain any further type family instances.
1643 checkFamInst :: [Type] -- lhs
1644 -> [(TyCon, [Type])] -- type family instances
1646 checkFamInst lhsTys famInsts
1647 = mapCatMaybes check famInsts
1649 size = sizeTypes lhsTys
1650 fvs = fvTypes lhsTys
1652 | not (all isTyFamFree tys)
1653 = Just (famInstUndecErr famInst nestedMsg $$ parens undecidableMsg)
1654 | not (null (fvTypes tys \\ fvs))
1655 = Just (famInstUndecErr famInst nomoreVarMsg $$ parens undecidableMsg)
1656 | size <= sizeTypes tys
1657 = Just (famInstUndecErr famInst smallerAppMsg $$ parens undecidableMsg)
1661 famInst = TyConApp tc tys
1663 -- Ensure that no type family instances occur in a type.
1665 checkTyFamFreeness :: Type -> TcM ()
1666 checkTyFamFreeness ty
1667 = checkTc (isTyFamFree ty) $
1668 tyFamInstInIndexErr ty
1670 -- Check that a type does not contain any type family applications.
1672 isTyFamFree :: Type -> Bool
1673 isTyFamFree = null . tyFamInsts
1677 tyFamInstInIndexErr ty
1678 = hang (ptext SLIT("Illegal type family application in type instance") <>
1683 = hang (ptext SLIT("Illegal polymorphic type in type instance") <> colon) 4 $
1686 famInstUndecErr ty msg
1688 nest 2 (ptext SLIT("in the type family application:") <+>
1691 nestedMsg = ptext SLIT("Nested type family application")
1692 nomoreVarMsg = ptext SLIT("Variable occurs more often than in instance head")
1693 smallerAppMsg = ptext SLIT("Application is no smaller than the instance head")
1697 %************************************************************************
1699 \subsection{Auxiliary functions}
1701 %************************************************************************
1704 -- Free variables of a type, retaining repetitions, and expanding synonyms
1705 fvType :: Type -> [TyVar]
1706 fvType ty | Just exp_ty <- tcView ty = fvType exp_ty
1707 fvType (TyVarTy tv) = [tv]
1708 fvType (TyConApp _ tys) = fvTypes tys
1709 fvType (NoteTy _ ty) = fvType ty
1710 fvType (PredTy pred) = fvPred pred
1711 fvType (FunTy arg res) = fvType arg ++ fvType res
1712 fvType (AppTy fun arg) = fvType fun ++ fvType arg
1713 fvType (ForAllTy tyvar ty) = filter (/= tyvar) (fvType ty)
1715 fvTypes :: [Type] -> [TyVar]
1716 fvTypes tys = concat (map fvType tys)
1718 fvPred :: PredType -> [TyVar]
1719 fvPred (ClassP _ tys') = fvTypes tys'
1720 fvPred (IParam _ ty) = fvType ty
1721 fvPred (EqPred ty1 ty2) = fvType ty1 ++ fvType ty2
1723 -- Size of a type: the number of variables and constructors
1724 sizeType :: Type -> Int
1725 sizeType ty | Just exp_ty <- tcView ty = sizeType exp_ty
1726 sizeType (TyVarTy _) = 1
1727 sizeType (TyConApp _ tys) = sizeTypes tys + 1
1728 sizeType (NoteTy _ ty) = sizeType ty
1729 sizeType (PredTy pred) = sizePred pred
1730 sizeType (FunTy arg res) = sizeType arg + sizeType res + 1
1731 sizeType (AppTy fun arg) = sizeType fun + sizeType arg
1732 sizeType (ForAllTy _ ty) = sizeType ty
1734 sizeTypes :: [Type] -> Int
1735 sizeTypes xs = sum (map sizeType xs)
1737 sizePred :: PredType -> Int
1738 sizePred (ClassP _ tys') = sizeTypes tys'
1739 sizePred (IParam _ ty) = sizeType ty
1740 sizePred (EqPred ty1 ty2) = sizeType ty1 + sizeType ty2