2 (c) The University of Glasgow 2006
3 (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
6 Type subsumption and unification
9 {-# LANGUAGE CPP, MultiWayIf, TupleSections, ScopedTypeVariables #-}
12 -- Full-blown subsumption
13 tcWrapResult
, tcWrapResultO
, tcSkolemise
, tcSkolemiseET
,
14 tcSubTypeHR
, tcSubTypeO
, tcSubType_NC
, tcSubTypeDS
,
15 tcSubTypeDS_NC_O
, tcSubTypeET
,
16 checkConstraints
, checkTvConstraints
,
19 -- Various unifications
20 unifyType
, unifyTheta
, unifyKind
,
22 swapOverTyVars
, canSolveByUnification
,
24 --------------------------------
26 tcInferInst
, tcInferNoInst
,
28 matchExpectedTyConApp
,
31 matchActualFunTys
, matchActualFunTysPart
,
34 metaTyVarUpdateOK
, occCheckForErrors
, OccCheckResult
(..)
38 #include
"HsVersions.h"
50 import Name
( isSystemName
)
54 import TysPrim
( tYPE
)
63 import qualified GHC
.LanguageExtensions
as LangExt
67 import Control
.Arrow
( second
)
70 ************************************************************************
72 matchExpected functions
74 ************************************************************************
76 Note [Herald for matchExpectedFunTys]
77 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
78 The 'herald' always looks like:
79 "The equation(s) for 'f' have"
80 "The abstraction (\x.e) takes"
81 "The section (+ x) expects"
82 "The function 'f' is applied to"
84 This is used to construct a message of form
86 The abstraction `\Just 1 -> ...' takes two arguments
87 but its type `Maybe a -> a' has only one
89 The equation(s) for `f' have two arguments
90 but its type `Maybe a -> a' has only one
92 The section `(f 3)' requires 'f' to take two arguments
93 but its type `Int -> Int' has only one
95 The function 'f' is applied to two arguments
96 but its type `Int -> Int' has only one
98 When visible type applications (e.g., `f @Int 1 2`, as in #13902) enter the
99 picture, we have a choice in deciding whether to count the type applications as
102 The function 'f' is applied to one visible type argument
103 and two value arguments
104 but its type `forall a. a -> a` has only one visible type argument
105 and one value argument
107 Or whether to include the type applications as part of the herald itself:
109 The expression 'f @Int' is applied to two arguments
110 but its type `Int -> Int` has only one
112 The latter is easier to implement and is arguably easier to understand, so we
113 choose to implement that option.
115 Note [matchExpectedFunTys]
116 ~~~~~~~~~~~~~~~~~~~~~~~~~~
117 matchExpectedFunTys checks that a sigma has the form
118 of an n-ary function. It passes the decomposed type to the
119 thing_inside, and returns a wrapper to coerce between the two types
121 It's used wherever a language construct must have a functional type,
124 A function definition
127 This function must be written CPS'd because it needs to fill in the
128 ExpTypes produced for arguments before it can fill in the ExpType
133 -- Use this one when you have an "expected" type.
134 matchExpectedFunTys
:: forall a
.
135 SDoc
-- See Note [Herald for matchExpectedFunTys]
137 -> ExpRhoType
-- deeply skolemised
138 -> ([ExpSigmaType
] -> ExpRhoType
-> TcM a
)
139 -- must fill in these ExpTypes here
140 -> TcM
(a
, HsWrapper
)
141 -- If matchExpectedFunTys n ty = (_, wrap)
142 -- then wrap : (t1 -> ... -> tn -> ty_r) ~> ty,
143 -- where [t1, ..., tn], ty_r are passed to the thing_inside
144 matchExpectedFunTys herald arity orig_ty thing_inside
146 Check ty
-> go
[] arity ty
147 _
-> defer
[] arity orig_ty
150 = do { result
<- thing_inside
(reverse acc_arg_tys
) (mkCheckExpType ty
)
151 ; return (result
, idHsWrapper
) }
154 | Just ty
' <- tcView ty
= go acc_arg_tys n ty
'
156 go acc_arg_tys n
(FunTy arg_ty res_ty
)
157 = ASSERT
( not (isPredTy arg_ty
) )
158 do { (result
, wrap_res
) <- go
(mkCheckExpType arg_ty
: acc_arg_tys
)
161 , mkWpFun idHsWrapper wrap_res arg_ty res_ty doc
) }
163 doc
= text
"When inferring the argument type of a function with type" <+>
166 go acc_arg_tys n ty
@(TyVarTy tv
)
168 = do { cts
<- readMetaTyVar tv
170 Indirect ty
' -> go acc_arg_tys n ty
'
171 Flexi
-> defer acc_arg_tys n
(mkCheckExpType ty
) }
173 -- In all other cases we bale out into ordinary unification
174 -- However unlike the meta-tyvar case, we are sure that the
175 -- number of arguments doesn't match arity of the original
176 -- type, so we can add a bit more context to the error message
179 -- It is not always an error, because specialized type may have
180 -- different arity, for example:
183 -- > f2 :: Monad m => m Bool
186 -- But in that case we add specialized type into error context
187 -- anyway, because it may be useful. See also Trac #9605.
188 go acc_arg_tys n ty
= addErrCtxtM mk_ctxt
$
189 defer acc_arg_tys n
(mkCheckExpType ty
)
192 defer
:: [ExpSigmaType
] -> Arity
-> ExpRhoType
-> TcM
(a
, HsWrapper
)
193 defer acc_arg_tys n fun_ty
194 = do { more_arg_tys
<- replicateM n newInferExpTypeNoInst
195 ; res_ty
<- newInferExpTypeInst
196 ; result
<- thing_inside
(reverse acc_arg_tys
++ more_arg_tys
) res_ty
197 ; more_arg_tys
<- mapM readExpType more_arg_tys
198 ; res_ty
<- readExpType res_ty
199 ; let unif_fun_ty
= mkFunTys more_arg_tys res_ty
200 ; wrap
<- tcSubTypeDS AppOrigin GenSigCtxt unif_fun_ty fun_ty
201 -- Not a good origin at all :-(
202 ; return (result
, wrap
) }
205 mk_ctxt
:: TidyEnv
-> TcM
(TidyEnv
, MsgDoc
)
206 mk_ctxt env
= do { (env
', ty
) <- zonkTidyTcType env orig_tc_ty
207 ; let (args
, _
) = tcSplitFunTys ty
208 n_actual
= length args
209 (env
'', orig_ty
') = tidyOpenType env
' orig_tc_ty
211 , mk_fun_tys_msg orig_ty
' ty n_actual arity herald
) }
213 orig_tc_ty
= checkingExpType
"matchExpectedFunTys" orig_ty
214 -- this is safe b/c we're called from "go"
216 -- Like 'matchExpectedFunTys', but used when you have an "actual" type,
217 -- for example in function application
218 matchActualFunTys
:: SDoc
-- See Note [Herald for matchExpectedFunTys]
220 -> Maybe (HsExpr GhcRn
) -- the thing with type TcSigmaType
223 -> TcM
(HsWrapper
, [TcSigmaType
], TcSigmaType
)
224 -- If matchActualFunTys n ty = (wrap, [t1,..,tn], ty_r)
225 -- then wrap : ty ~> (t1 -> ... -> tn -> ty_r)
226 matchActualFunTys herald ct_orig mb_thing arity ty
227 = matchActualFunTysPart herald ct_orig mb_thing arity ty
[] arity
229 -- | Variant of 'matchActualFunTys' that works when supplied only part
230 -- (that is, to the right of some arrows) of the full function type
231 matchActualFunTysPart
:: SDoc
-- See Note [Herald for matchExpectedFunTys]
233 -> Maybe (HsExpr GhcRn
) -- the thing with type TcSigmaType
236 -> [TcSigmaType
] -- reversed args. See (*) below.
237 -> Arity
-- overall arity of the function, for errs
238 -> TcM
(HsWrapper
, [TcSigmaType
], TcSigmaType
)
239 matchActualFunTysPart herald ct_orig mb_thing arity orig_ty
240 orig_old_args full_arity
241 = go arity orig_old_args orig_ty
242 -- Does not allocate unnecessary meta variables: if the input already is
243 -- a function, we just take it apart. Not only is this efficient,
244 -- it's important for higher rank: the argument might be of form
245 -- (forall a. ty) -> other
246 -- If allocated (fresh-meta-var1 -> fresh-meta-var2) and unified, we'd
247 -- hide the forall inside a meta-variable
249 -- (*) Sometimes it's necessary to call matchActualFunTys with only part
250 -- (that is, to the right of some arrows) of the type of the function in
251 -- question. (See TcExpr.tcArgs.) This argument is the reversed list of
252 -- arguments already seen (that is, not part of the TcSigmaType passed
256 -- This function has a bizarre mechanic: it accumulates arguments on
257 -- the way down and also builds an argument list on the way up. Why:
258 -- 1. The returns args list and the accumulated args list might be different.
259 -- The accumulated args include all the arg types for the function,
260 -- including those from before this function was called. The returned
261 -- list should include only those arguments produced by this call of
264 -- 2. The HsWrapper can be built only on the way up. It seems (more)
265 -- bizarre to build the HsWrapper but not the arg_tys.
267 -- Refactoring is welcome.
269 -> [TcSigmaType
] -- accumulator of arguments (reversed)
270 -> TcSigmaType
-- the remainder of the type as we're processing
271 -> TcM
(HsWrapper
, [TcSigmaType
], TcSigmaType
)
272 go
0 _ ty
= return (idHsWrapper
, [], ty
)
275 |
not (null tvs
&& null theta
)
276 = do { (wrap1
, rho
) <- topInstantiate ct_orig ty
277 ; (wrap2
, arg_tys
, res_ty
) <- go n acc_args rho
278 ; return (wrap2
<.> wrap1
, arg_tys
, res_ty
) }
280 (tvs
, theta
, _
) = tcSplitSigmaTy ty
283 | Just ty
' <- tcView ty
= go n acc_args ty
'
285 go n acc_args
(FunTy arg_ty res_ty
)
286 = ASSERT
( not (isPredTy arg_ty
) )
287 do { (wrap_res
, tys
, ty_r
) <- go
(n
-1) (arg_ty
: acc_args
) res_ty
288 ; return ( mkWpFun idHsWrapper wrap_res arg_ty ty_r doc
289 , arg_ty
: tys
, ty_r
) }
291 doc
= text
"When inferring the argument type of a function with type" <+>
294 go n acc_args ty
@(TyVarTy tv
)
296 = do { cts
<- readMetaTyVar tv
298 Indirect ty
' -> go n acc_args ty
'
299 Flexi
-> defer n ty
}
301 -- In all other cases we bale out into ordinary unification
302 -- However unlike the meta-tyvar case, we are sure that the
303 -- number of arguments doesn't match arity of the original
304 -- type, so we can add a bit more context to the error message
307 -- It is not always an error, because specialized type may have
308 -- different arity, for example:
311 -- > f2 :: Monad m => m Bool
314 -- But in that case we add specialized type into error context
315 -- anyway, because it may be useful. See also Trac #9605.
316 go n acc_args ty
= addErrCtxtM
(mk_ctxt
(reverse acc_args
) ty
) $
321 = do { arg_tys
<- replicateM n newOpenFlexiTyVarTy
322 ; res_ty
<- newOpenFlexiTyVarTy
323 ; let unif_fun_ty
= mkFunTys arg_tys res_ty
324 ; co
<- unifyType mb_thing fun_ty unif_fun_ty
325 ; return (mkWpCastN co
, arg_tys
, res_ty
) }
328 mk_ctxt
:: [TcSigmaType
] -> TcSigmaType
-> TidyEnv
-> TcM
(TidyEnv
, MsgDoc
)
329 mk_ctxt arg_tys res_ty env
330 = do { let ty
= mkFunTys arg_tys res_ty
331 ; (env1
, zonked
) <- zonkTidyTcType env ty
332 -- zonking might change # of args
333 ; let (zonked_args
, _
) = tcSplitFunTys zonked
334 n_actual
= length zonked_args
335 (env2
, unzonked
) = tidyOpenType env1 ty
337 , mk_fun_tys_msg unzonked zonked n_actual full_arity herald
) }
339 mk_fun_tys_msg
:: TcType
-- the full type passed in (unzonked)
340 -> TcType
-- the full type passed in (zonked)
341 -> Arity
-- the # of args found
342 -> Arity
-- the # of args wanted
343 -> SDoc
-- overall herald
345 mk_fun_tys_msg full_ty ty n_args full_arity herald
346 = herald
<+> speakNOf full_arity
(text
"argument") <> comma
$$
347 if n_args
== full_arity
348 then text
"its type is" <+> quotes
(pprType full_ty
) <>
350 text
"it is specialized to" <+> quotes
(pprType ty
)
351 else sep
[text
"but its type" <+> quotes
(pprType ty
),
352 if n_args
== 0 then text
"has none"
353 else text
"has only" <+> speakN n_args
]
355 ----------------------
356 matchExpectedListTy
:: TcRhoType
-> TcM
(TcCoercionN
, TcRhoType
)
357 -- Special case for lists
358 matchExpectedListTy exp_ty
359 = do { (co
, [elt_ty
]) <- matchExpectedTyConApp listTyCon exp_ty
360 ; return (co
, elt_ty
) }
362 ---------------------
363 matchExpectedTyConApp
:: TyCon
-- T :: forall kv1 ... kvm. k1 -> ... -> kn -> *
364 -> TcRhoType
-- orig_ty
365 -> TcM
(TcCoercionN
, -- T k1 k2 k3 a b c ~N orig_ty
366 [TcSigmaType
]) -- Element types, k1 k2 k3 a b c
368 -- It's used for wired-in tycons, so we call checkWiredInTyCon
369 -- Precondition: never called with FunTyCon
370 -- Precondition: input type :: *
371 -- Postcondition: (T k1 k2 k3 a b c) is well-kinded
373 matchExpectedTyConApp tc orig_ty
374 = ASSERT
(tc
/= funTyCon
) go orig_ty
377 | Just ty
' <- tcView ty
380 go ty
@(TyConApp tycon args
)
381 | tc
== tycon
-- Common case
382 = return (mkTcNomReflCo ty
, args
)
386 = do { cts
<- readMetaTyVar tv
393 -- If the common case does not occur, instantiate a template
394 -- T k1 .. kn t1 .. tm, and unify with the original type
395 -- Doing it this way ensures that the types we return are
396 -- kind-compatible with T. For example, suppose we have
397 -- matchExpectedTyConApp T (f Maybe)
398 -- where data T a = MkT a
399 -- Then we don't want to instantiate T's data constructors with
401 -- because that'll make types that are utterly ill-kinded.
402 -- This happened in Trac #7368
404 = do { (_
, arg_tvs
) <- newMetaTyVars
(tyConTyVars tc
)
405 ; traceTc
"matchExpectedTyConApp" (ppr tc
$$ ppr
(tyConTyVars tc
) $$ ppr arg_tvs
)
406 ; let args
= mkTyVarTys arg_tvs
407 tc_template
= mkTyConApp tc args
408 ; co
<- unifyType Nothing tc_template orig_ty
409 ; return (co
, args
) }
411 ----------------------
412 matchExpectedAppTy
:: TcRhoType
-- orig_ty
413 -> TcM
(TcCoercion
, -- m a ~N orig_ty
414 (TcSigmaType
, TcSigmaType
)) -- Returns m, a
415 -- If the incoming type is a mutable type variable of kind k, then
416 -- matchExpectedAppTy returns a new type variable (m: * -> k); note the *.
418 matchExpectedAppTy orig_ty
422 | Just ty
' <- tcView ty
= go ty
'
424 | Just
(fun_ty
, arg_ty
) <- tcSplitAppTy_maybe ty
425 = return (mkTcNomReflCo orig_ty
, (fun_ty
, arg_ty
))
429 = do { cts
<- readMetaTyVar tv
436 -- Defer splitting by generating an equality constraint
438 = do { ty1
<- newFlexiTyVarTy kind1
439 ; ty2
<- newFlexiTyVarTy kind2
440 ; co
<- unifyType Nothing
(mkAppTy ty1 ty2
) orig_ty
441 ; return (co
, (ty1
, ty2
)) }
443 orig_kind
= typeKind orig_ty
444 kind1
= mkFunTy liftedTypeKind orig_kind
445 kind2
= liftedTypeKind
-- m :: * -> k
449 ************************************************************************
453 ************************************************************************
455 Note [Subsumption checking: tcSubType]
456 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
457 All the tcSubType calls have the form
458 tcSubType actual_ty expected_ty
460 actual_ty <= expected_ty
462 That is, that a value of type actual_ty is acceptable in
463 a place expecting a value of type expected_ty. I.e. that
465 actual ty is more polymorphic than expected_ty
467 It returns a coercion function
468 co_fn :: actual_ty ~ expected_ty
469 which takes an HsExpr of type actual_ty into one of type
472 These functions do not actually check for subsumption. They check if
473 expected_ty is an appropriate annotation to use for something of type
474 actual_ty. This difference matters when thinking about visible type
475 application. For example,
477 forall a. a -> forall b. b -> b
479 forall a b. a -> b -> b
481 because the type arguments appear in a different order. (Neither does
482 it work the other way around.) BUT, these types are appropriate annotations
483 for one another. Because the user directs annotations, it's OK if some
484 arguments shuffle around -- after all, it's what the user wants.
485 Bottom line: none of this changes with visible type application.
487 There are a number of wrinkles (below).
489 Notice that Wrinkle 1 and 2 both require eta-expansion, which technically
490 may increase termination. We just put up with this, in exchange for getting
491 more predictable type inference.
493 Wrinkle 1: Note [Deep skolemisation]
494 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
495 We want (forall a. Int -> a -> a) <= (Int -> forall a. a->a)
496 (see section 4.6 of "Practical type inference for higher rank types")
497 So we must deeply-skolemise the RHS before we instantiate the LHS.
499 That is why tc_sub_type starts with a call to tcSkolemise (which does the
500 deep skolemisation), and then calls the DS variant (which assumes
501 that expected_ty is deeply skolemised)
503 Wrinkle 2: Note [Co/contra-variance of subsumption checking]
504 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
505 Consider g :: (Int -> Int) -> Int
506 f1 :: (forall a. a -> a) -> Int
509 f2 :: (forall a. a -> a) -> Int
511 f2 will typecheck, and it would be odd/fragile if f1 did not.
512 But f1 will only typecheck if we have that
513 (Int->Int) -> Int <= (forall a. a->a) -> Int
514 And that is only true if we do the full co/contravariant thing
515 in the subsumption check. That happens in the FunTy case of
516 tcSubTypeDS_NC_O, and is the sole reason for the WpFun form of
519 Another powerful reason for doing this co/contra stuff is visible
520 in Trac #9569, involving instantiation of constraint variables,
521 and again involving eta-expansion.
523 Wrinkle 3: Note [Higher rank types]
524 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
526 f y = \ (x::forall a. a->a). blah
527 The following happens:
528 * We will infer the type of the RHS, ie with a res_ty = alpha.
529 * Then the lambda will split alpha := beta -> gamma.
530 * And then we'll check tcSubType IsSwapped beta (forall a. a->a)
532 So it's important that we unify beta := forall a. a->a, rather than
533 skolemising the type.
537 -- | Call this variant when you are in a higher-rank situation and
538 -- you know the right-hand type is deeply skolemised.
539 tcSubTypeHR
:: CtOrigin
-- ^ of the actual type
540 -> Maybe (HsExpr GhcRn
) -- ^ If present, it has type ty_actual
541 -> TcSigmaType
-> ExpRhoType
-> TcM HsWrapper
542 tcSubTypeHR orig
= tcSubTypeDS_NC_O orig GenSigCtxt
544 ------------------------
545 tcSubTypeET
:: CtOrigin
-> UserTypeCtxt
546 -> ExpSigmaType
-> TcSigmaType
-> TcM HsWrapper
547 -- If wrap = tc_sub_type_et t1 t2
548 -- => wrap :: t1 ~> t2
549 tcSubTypeET orig ctxt
(Check ty_actual
) ty_expected
550 = tc_sub_tc_type eq_orig orig ctxt ty_actual ty_expected
552 eq_orig
= TypeEqOrigin
{ uo_actual
= ty_expected
553 , uo_expected
= ty_actual
555 , uo_visible
= True }
557 tcSubTypeET _ _
(Infer inf_res
) ty_expected
558 = ASSERT2
( not (ir_inst inf_res
), ppr inf_res
$$ ppr ty_expected
)
559 -- An (Infer inf_res) ExpSigmaType passed into tcSubTypeET never
560 -- has the ir_inst field set. Reason: in patterns (which is what
561 -- tcSubTypeET is used for) do not agressively instantiate
562 do { co
<- fill_infer_result ty_expected inf_res
563 -- Since ir_inst is false, we can skip fillInferResult
564 -- and go straight to fill_infer_result
566 ; return (mkWpCastN
(mkTcSymCo co
)) }
568 ------------------------
569 tcSubTypeO
:: CtOrigin
-- ^ of the actual type
570 -> UserTypeCtxt
-- ^ of the expected type
574 tcSubTypeO orig ctxt ty_actual ty_expected
575 = addSubTypeCtxt ty_actual ty_expected
$
576 do { traceTc
"tcSubTypeDS_O" (vcat
[ pprCtOrigin orig
577 , pprUserTypeCtxt ctxt
580 ; tcSubTypeDS_NC_O orig ctxt Nothing ty_actual ty_expected
}
582 addSubTypeCtxt
:: TcType
-> ExpType
-> TcM a
-> TcM a
583 addSubTypeCtxt ty_actual ty_expected thing_inside
584 | isRhoTy ty_actual
-- If there is no polymorphism involved, the
585 , isRhoExpTy ty_expected
-- TypeEqOrigin stuff (added by the _NC functions)
586 = thing_inside
-- gives enough context by itself
588 = addErrCtxtM mk_msg thing_inside
591 = do { (tidy_env
, ty_actual
) <- zonkTidyTcType tidy_env ty_actual
592 -- might not be filled if we're debugging. ugh.
593 ; mb_ty_expected
<- readExpType_maybe ty_expected
594 ; (tidy_env
, ty_expected
) <- case mb_ty_expected
of
595 Just ty
-> second mkCheckExpType
<$>
596 zonkTidyTcType tidy_env ty
597 Nothing
-> return (tidy_env
, ty_expected
)
598 ; ty_expected
<- readExpType ty_expected
599 ; (tidy_env
, ty_expected
) <- zonkTidyTcType tidy_env ty_expected
600 ; let msg
= vcat
[ hang
(text
"When checking that:")
602 , nest
2 (hang
(text
"is more polymorphic than:")
603 2 (ppr ty_expected
)) ]
604 ; return (tidy_env
, msg
) }
607 -- The "_NC" variants do not add a typechecker-error context;
608 -- the caller is assumed to do that
610 tcSubType_NC
:: UserTypeCtxt
-> TcSigmaType
-> TcSigmaType
-> TcM HsWrapper
611 -- Checks that actual <= expected
612 -- Returns HsWrapper :: actual ~ expected
613 tcSubType_NC ctxt ty_actual ty_expected
614 = do { traceTc
"tcSubType_NC" (vcat
[pprUserTypeCtxt ctxt
, ppr ty_actual
, ppr ty_expected
])
615 ; tc_sub_tc_type origin origin ctxt ty_actual ty_expected
}
617 origin
= TypeEqOrigin
{ uo_actual
= ty_actual
618 , uo_expected
= ty_expected
620 , uo_visible
= True }
622 tcSubTypeDS
:: CtOrigin
-> UserTypeCtxt
-> TcSigmaType
-> ExpRhoType
-> TcM HsWrapper
623 -- Just like tcSubType, but with the additional precondition that
624 -- ty_expected is deeply skolemised (hence "DS")
625 tcSubTypeDS orig ctxt ty_actual ty_expected
626 = addSubTypeCtxt ty_actual ty_expected
$
627 do { traceTc
"tcSubTypeDS_NC" (vcat
[pprUserTypeCtxt ctxt
, ppr ty_actual
, ppr ty_expected
])
628 ; tcSubTypeDS_NC_O orig ctxt Nothing ty_actual ty_expected
}
630 tcSubTypeDS_NC_O
:: CtOrigin
-- origin used for instantiation only
632 -> Maybe (HsExpr GhcRn
)
633 -> TcSigmaType
-> ExpRhoType
-> TcM HsWrapper
634 -- Just like tcSubType, but with the additional precondition that
635 -- ty_expected is deeply skolemised
636 tcSubTypeDS_NC_O inst_orig ctxt m_thing ty_actual ty_expected
637 = case ty_expected
of
638 Infer inf_res
-> fillInferResult inst_orig ty_actual inf_res
639 Check ty
-> tc_sub_type_ds eq_orig inst_orig ctxt ty_actual ty
641 eq_orig
= TypeEqOrigin
{ uo_actual
= ty_actual
, uo_expected
= ty
642 , uo_thing
= ppr
<$> m_thing
643 , uo_visible
= True }
646 tc_sub_tc_type
:: CtOrigin
-- used when calling uType
647 -> CtOrigin
-- used when instantiating
648 -> UserTypeCtxt
-> TcSigmaType
-> TcSigmaType
-> TcM HsWrapper
649 -- If wrap = tc_sub_type t1 t2
650 -- => wrap :: t1 ~> t2
651 tc_sub_tc_type eq_orig inst_orig ctxt ty_actual ty_expected
652 | definitely_poly ty_expected
-- See Note [Don't skolemise unnecessarily]
653 , not (possibly_poly ty_actual
)
654 = do { traceTc
"tc_sub_tc_type (drop to equality)" $
655 vcat
[ text
"ty_actual =" <+> ppr ty_actual
656 , text
"ty_expected =" <+> ppr ty_expected
]
658 uType TypeLevel eq_orig ty_actual ty_expected
}
660 |
otherwise -- This is the general case
661 = do { traceTc
"tc_sub_tc_type (general case)" $
662 vcat
[ text
"ty_actual =" <+> ppr ty_actual
663 , text
"ty_expected =" <+> ppr ty_expected
]
664 ; (sk_wrap
, inner_wrap
) <- tcSkolemise ctxt ty_expected
$
666 tc_sub_type_ds eq_orig inst_orig ctxt
668 ; return (sk_wrap
<.> inner_wrap
) }
671 | isForAllTy ty
= True
672 | Just
(_
, res
) <- splitFunTy_maybe ty
= possibly_poly res
674 -- NB *not* tcSplitFunTy, because here we want
675 -- to decompose type-class arguments too
678 |
(tvs
, theta
, tau
) <- tcSplitSigmaTy ty
681 , isInsolubleOccursCheck NomEq tv tau
686 {- Note [Don't skolemise unnecessarily]
687 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
688 Suppose we are trying to solve
689 (Char->Char) <= (forall a. a->a)
690 We could skolemise the 'forall a', and then complain
691 that (Char ~ a) is insoluble; but that's a pretty obscure
692 error. It's better to say that
693 (Char->Char) ~ (forall a. a->a)
697 * if the ty_expected has an outermost forall
698 (i.e. skolemisation is the next thing we'd do)
699 * and the ty_actual has no top-level polymorphism (but looking deeply)
700 then we can revert to simple equality. But we need to be careful.
701 These examples are all fine:
703 * (Char -> forall a. a->a) <= (forall a. Char -> a -> a)
704 Polymorphism is buried in ty_actual
706 * (Char->Char) <= (forall a. Char -> Char)
707 ty_expected isn't really polymorphic
709 * (Char->Char) <= (forall a. (a~Char) => a -> a)
710 ty_expected isn't really polymorphic
712 * (Char->Char) <= (forall a. F [a] Char -> Char)
713 where type instance F [x] t = t
714 ty_expected isn't really polymorphic
716 If we prematurely go to equality we'll reject a program we should
717 accept (e.g. Trac #13752). So the test (which is only to improve
718 error message) is very conservative:
719 * ty_actual is /definitely/ monomorphic
720 * ty_expected is /definitely/ polymorphic
724 tc_sub_type_ds
:: CtOrigin
-- used when calling uType
725 -> CtOrigin
-- used when instantiating
726 -> UserTypeCtxt
-> TcSigmaType
-> TcRhoType
-> TcM HsWrapper
727 -- If wrap = tc_sub_type_ds t1 t2
728 -- => wrap :: t1 ~> t2
729 -- Here is where the work actually happens!
730 -- Precondition: ty_expected is deeply skolemised
731 tc_sub_type_ds eq_orig inst_orig ctxt ty_actual ty_expected
732 = do { traceTc
"tc_sub_type_ds" $
733 vcat
[ text
"ty_actual =" <+> ppr ty_actual
734 , text
"ty_expected =" <+> ppr ty_expected
]
735 ; go ty_actual ty_expected
}
737 go ty_a ty_e | Just ty_a
' <- tcView ty_a
= go ty_a
' ty_e
738 | Just ty_e
' <- tcView ty_e
= go ty_a ty_e
'
740 go
(TyVarTy tv_a
) ty_e
741 = do { lookup_res
<- lookupTcTyVar tv_a
744 do { traceTc
"tcSubTypeDS_NC_O following filled act meta-tyvar:"
745 (ppr tv_a
<+> text
"-->" <+> ppr ty_a
')
746 ; tc_sub_type_ds eq_orig inst_orig ctxt ty_a
' ty_e
}
747 Unfilled _
-> unify
}
749 -- Historical note (Sept 16): there was a case here for
750 -- go ty_a (TyVarTy alpha)
751 -- which, in the impredicative case unified alpha := ty_a
752 -- where th_a is a polytype. Not only is this probably bogus (we
753 -- simply do not have decent story for imprdicative types), but it
754 -- caused Trac #12616 because (also bizarrely) 'deriving' code had
755 -- -XImpredicativeTypes on. I deleted the entire case.
757 go
(FunTy act_arg act_res
) (FunTy exp_arg exp_res
)
758 |
not (isPredTy act_arg
)
759 , not (isPredTy exp_arg
)
760 = -- See Note [Co/contra-variance of subsumption checking]
761 do { res_wrap
<- tc_sub_type_ds eq_orig inst_orig ctxt act_res exp_res
762 ; arg_wrap
<- tc_sub_tc_type eq_orig given_orig ctxt exp_arg act_arg
763 ; return (mkWpFun arg_wrap res_wrap exp_arg exp_res doc
) }
764 -- arg_wrap :: exp_arg ~> act_arg
765 -- res_wrap :: act-res ~> exp_res
767 given_orig
= GivenOrigin
(SigSkol GenSigCtxt exp_arg
[])
768 doc
= text
"When checking that" <+> quotes
(ppr ty_actual
) <+>
769 text
"is more polymorphic than" <+> quotes
(ppr ty_expected
)
772 |
let (tvs
, theta
, _
) = tcSplitSigmaTy ty_a
773 , not (null tvs
&& null theta
)
774 = do { (in_wrap
, in_rho
) <- topInstantiate inst_orig ty_a
775 ; body_wrap
<- tc_sub_type_ds
776 (eq_orig
{ uo_actual
= in_rho
777 , uo_expected
= ty_expected
})
778 inst_orig ctxt in_rho ty_e
779 ; return (body_wrap
<.> in_wrap
) }
781 |
otherwise -- Revert to unification
783 -- It's still possible that ty_actual has nested foralls. Instantiate
784 -- these, as there's no way unification will succeed with them in.
785 -- See typecheck/should_compile/T11305 for an example of when this
786 -- is important. The problem is that we're checking something like
787 -- a -> forall b. b -> b <= alpha beta gamma
788 -- where we end up with alpha := (->)
790 inst_and_unify
= do { (wrap
, rho_a
) <- deeplyInstantiate inst_orig ty_actual
792 -- if we haven't recurred through an arrow, then
793 -- the eq_orig will list ty_actual. In this case,
794 -- we want to update the origin to reflect the
795 -- instantiation. If we *have* recurred through
796 -- an arrow, it's better not to update.
797 ; let eq_orig
' = case eq_orig
of
798 TypeEqOrigin
{ uo_actual
= orig_ty_actual
}
799 | orig_ty_actual `tcEqType` ty_actual
800 , not (isIdHsWrapper wrap
)
801 -> eq_orig
{ uo_actual
= rho_a
}
804 ; cow
<- uType TypeLevel eq_orig
' rho_a ty_expected
805 ; return (mkWpCastN cow
<.> wrap
) }
808 -- use versions without synonyms expanded
809 unify
= mkWpCastN
<$> uType TypeLevel eq_orig ty_actual ty_expected
812 -- needs both un-type-checked (for origins) and type-checked (for wrapping)
814 tcWrapResult
:: HsExpr GhcRn
-> HsExpr GhcTcId
-> TcSigmaType
-> ExpRhoType
815 -> TcM
(HsExpr GhcTcId
)
816 tcWrapResult rn_expr
= tcWrapResultO
(exprCtOrigin rn_expr
) rn_expr
818 -- | Sometimes we don't have a @HsExpr Name@ to hand, and this is more
820 tcWrapResultO
:: CtOrigin
-> HsExpr GhcRn
-> HsExpr GhcTcId
-> TcSigmaType
-> ExpRhoType
821 -> TcM
(HsExpr GhcTcId
)
822 tcWrapResultO orig rn_expr expr actual_ty res_ty
823 = do { traceTc
"tcWrapResult" (vcat
[ text
"Actual: " <+> ppr actual_ty
824 , text
"Expected:" <+> ppr res_ty
])
825 ; cow
<- tcSubTypeDS_NC_O orig GenSigCtxt
826 (Just rn_expr
) actual_ty res_ty
827 ; return (mkHsWrap cow expr
) }
830 {- **********************************************************************
832 ExpType functions: tcInfer, fillInferResult
834 %********************************************************************* -}
836 -- | Infer a type using a fresh ExpType
837 -- See also Note [ExpType] in TcMType
838 -- Does not attempt to instantiate the inferred type
839 tcInferNoInst
:: (ExpSigmaType
-> TcM a
) -> TcM
(a
, TcSigmaType
)
840 tcInferNoInst
= tcInfer
False
842 tcInferInst
:: (ExpRhoType
-> TcM a
) -> TcM
(a
, TcRhoType
)
843 tcInferInst
= tcInfer
True
845 tcInfer
:: Bool -> (ExpSigmaType
-> TcM a
) -> TcM
(a
, TcSigmaType
)
846 tcInfer instantiate tc_check
847 = do { res_ty
<- newInferExpType instantiate
848 ; result
<- tc_check res_ty
849 ; res_ty
<- readExpType res_ty
850 ; return (result
, res_ty
) }
852 fillInferResult
:: CtOrigin
-> TcType
-> InferResult
-> TcM HsWrapper
853 -- If wrap = fillInferResult t1 t2
854 -- => wrap :: t1 ~> t2
855 -- See Note [Deep instantiation of InferResult]
856 fillInferResult orig ty inf_res
@(IR
{ ir_inst
= instantiate_me
})
858 = do { (wrap
, rho
) <- deeplyInstantiate orig ty
859 ; co
<- fill_infer_result rho inf_res
860 ; return (mkWpCastN co
<.> wrap
) }
863 = do { co
<- fill_infer_result ty inf_res
864 ; return (mkWpCastN co
) }
866 fill_infer_result
:: TcType
-> InferResult
-> TcM TcCoercionN
867 -- If wrap = fill_infer_result t1 t2
868 -- => wrap :: t1 ~> t2
869 fill_infer_result orig_ty
(IR
{ ir_uniq
= u
, ir_lvl
= res_lvl
871 = do { (ty_co
, ty_to_fill_with
) <- promoteTcType res_lvl orig_ty
873 ; traceTc
"Filling ExpType" $
874 ppr u
<+> text
":=" <+> ppr ty_to_fill_with
876 ; when debugIsOn
(check_hole ty_to_fill_with
)
878 ; writeTcRef ref
(Just ty_to_fill_with
)
882 check_hole ty
-- Debug check only
883 = do { let ty_lvl
= tcTypeLevel ty
884 ; MASSERT2
( not (ty_lvl `strictlyDeeperThan` res_lvl
),
885 ppr u
$$ ppr res_lvl
$$ ppr ty_lvl
$$
886 ppr ty
<+> dcolon
<+> ppr
(typeKind ty
) $$ ppr orig_ty
)
887 ; cts
<- readTcRef ref
889 Just already_there
-> pprPanic
"writeExpType"
892 , ppr already_there
])
893 Nothing
-> return () }
895 {- Note [Deep instantiation of InferResult]
896 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
897 In some cases we want to deeply instantiate before filling in
898 an InferResult, and in some cases not. That's why InferReult
899 has the ir_inst flag.
901 * ir_inst = True: deeply instantiate
905 We want to instantiate the type of (*) before returning, else we
907 f :: forall {a}. a -> forall b. Num b => b -> b -> b
908 This is surely confusing for users.
910 And worse, the monomorphism restriction won't properly. The MR is
911 dealt with in simplifyInfer, and simplifyInfer has no way of
912 instantiating. This could perhaps be worked around, but it may be
913 hard to know even when instantiation should happen.
915 Another reason. Consider
916 f :: (?x :: Int) => a -> a
917 g y = let ?x = 3::Int in f
918 Here want to instantiate f's type so that the ?x::Int constraint
919 gets discharged by the enclosing implicit-parameter binding.
921 * ir_inst = False: do not instantiate
923 Consider this (which uses visible type application):
925 (let { f :: forall a. a -> a; f x = x } in f) @Int
927 We'll call TcExpr.tcInferFun to infer the type of the (let .. in f)
928 And we don't want to instantite the type of 'f' when we reach it,
929 else the outer visible type application won't work
932 {- *********************************************************************
936 ********************************************************************* -}
938 promoteTcType
:: TcLevel
-> TcType
-> TcM
(TcCoercion
, TcType
)
939 -- See Note [Promoting a type]
940 -- promoteTcType level ty = (co, ty')
941 -- * Returns ty' whose max level is just 'level'
942 -- and whose kind is ~# to the kind of 'ty'
943 -- and whose kind has form TYPE rr
944 -- * and co :: ty ~ ty'
945 -- * and emits constraints to justify the coercion
946 promoteTcType dest_lvl ty
947 = do { cur_lvl
<- getTcLevel
948 ; if (cur_lvl `sameDepthAs` dest_lvl
)
952 promote_it
:: TcM
(TcCoercion
, TcType
)
953 promote_it
-- Emit a constraint (alpha :: TYPE rr) ~ ty
954 -- where alpha and rr are fresh and from level dest_lvl
955 = do { rr
<- newMetaTyVarTyAtLevel dest_lvl runtimeRepTy
956 ; prom_ty
<- newMetaTyVarTyAtLevel dest_lvl
(tYPE rr
)
957 ; let eq_orig
= TypeEqOrigin
{ uo_actual
= ty
958 , uo_expected
= prom_ty
960 , uo_visible
= False }
962 ; co
<- emitWantedEq eq_orig TypeLevel Nominal ty prom_ty
963 ; return (co
, prom_ty
) }
965 dont_promote_it
:: TcM
(TcCoercion
, TcType
)
966 dont_promote_it
-- Check that ty :: TYPE rr, for some (fresh) rr
967 = do { res_kind
<- newOpenTypeKind
968 ; let ty_kind
= typeKind ty
969 kind_orig
= TypeEqOrigin
{ uo_actual
= ty_kind
970 , uo_expected
= res_kind
972 , uo_visible
= False }
973 ; ki_co
<- uType KindLevel kind_orig
(typeKind ty
) res_kind
974 ; let co
= mkTcGReflRightCo Nominal ty ki_co
975 ; return (co
, ty `mkCastTy` ki_co
) }
977 {- Note [Promoting a type]
978 ~~~~~~~~~~~~~~~~~~~~~~~~~~
979 Consider (Trac #12427)
982 MkT :: (Int -> Int) -> a -> T
984 h y = case y of MkT v w -> v
986 We'll infer the RHS type with an expected type ExpType of
987 (IR { ir_lvl = l, ir_ref = ref, ... )
988 where 'l' is the TcLevel of the RHS of 'h'. Then the MkT pattern
989 match will increase the level, so we'll end up in tcSubType, trying to
992 with the expected type. But this attempt takes place at level (l+1),
993 rightly so, since v's type could have mentioned existential variables,
994 (like w's does) and we want to catch that.
997 - create a new meta-var alpha[l+1]
998 - fill in the InferRes ref cell 'ref' with alpha
999 - emit an equality constraint, thus
1000 [W] alpha[l+1] ~ (Int -> Int)
1002 That constraint will float outwards, as it should, unless v's
1003 type mentions a skolem-captured variable.
1005 This approach fails if v has a higher rank type; see
1006 Note [Promotion and higher rank types]
1009 Note [Promotion and higher rank types]
1010 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1011 If v had a higher-rank type, say v :: (forall a. a->a) -> Int,
1012 then we'd emit an equality
1013 [W] alpha[l+1] ~ ((forall a. a->a) -> Int)
1014 which will sadly fail because we can't unify a unification variable
1015 with a polytype. But there is nothing really wrong with the program
1018 We could just about solve this by "promote the type" of v, to expose
1019 its polymorphic "shape" while still leaving constraints that will
1020 prevent existential escape. But we must be careful! Exposing
1021 the "shape" of the type is precisely what we must NOT do under
1022 a GADT pattern match! So in this case we might promote the type
1024 (forall a. a->a) -> alpha[l+1]
1025 and emit the constraint
1026 [W] alpha[l+1] ~ Int
1027 Now the poromoted type can fill the ref cell, while the emitted
1028 equality can float or not, according to the usual rules.
1030 But that's not quite right! We are exposing the arrow! We could
1032 (forall a. mu[l+1] a a) -> alpha[l+1]
1034 [W] alpha[l+1] ~ Int
1036 Here we abstract over the '->' inside the forall, in case that
1037 is subject to an equality constraint from a GADT match.
1039 Note that we kept the outer (->) because that's part of
1040 the polymorphic "shape". And becauuse of impredicativity,
1041 GADT matches can't give equalities that affect polymorphic
1044 This reasoning just seems too complicated, so I decided not
1045 to do it. These higher-rank notes are just here to record
1049 {- *********************************************************************
1053 ********************************************************************* -}
1055 -- | Take an "expected type" and strip off quantifiers to expose the
1056 -- type underneath, binding the new skolems for the @thing_inside@.
1057 -- The returned 'HsWrapper' has type @specific_ty -> expected_ty@.
1058 tcSkolemise
:: UserTypeCtxt
-> TcSigmaType
1059 -> ([TcTyVar
] -> TcType
-> TcM result
)
1060 -- ^ These are only ever used for scoped type variables.
1061 -> TcM
(HsWrapper
, result
)
1062 -- ^ The expression has type: spec_ty -> expected_ty
1064 tcSkolemise ctxt expected_ty thing_inside
1065 -- We expect expected_ty to be a forall-type
1066 -- If not, the call is a no-op
1067 = do { traceTc
"tcSkolemise" Outputable
.empty
1068 ; (wrap
, tv_prs
, given
, rho
') <- deeplySkolemise expected_ty
1072 traceTc
"tcSkolemise" $ vcat
[
1074 text
"expected_ty" <+> ppr expected_ty
,
1075 text
"inst tyvars" <+> ppr tv_prs
,
1076 text
"given" <+> ppr given
,
1077 text
"inst type" <+> ppr rho
' ]
1079 -- Generally we must check that the "forall_tvs" havn't been constrained
1080 -- The interesting bit here is that we must include the free variables
1081 -- of the expected_ty. Here's an example:
1082 -- runST (newVar True)
1083 -- Here, if we don't make a check, we'll get a type (ST s (MutVar s Bool))
1084 -- for (newVar True), with s fresh. Then we unify with the runST's arg type
1085 -- forall s'. ST s' a. That unifies s' with s, and a with MutVar s Bool.
1086 -- So now s' isn't unconstrained because it's linked to a.
1088 -- However [Oct 10] now that the untouchables are a range of
1089 -- TcTyVars, all this is handled automatically with no need for
1090 -- extra faffing around
1092 ; let tvs
' = map snd tv_prs
1093 skol_info
= SigSkol ctxt expected_ty tv_prs
1095 ; (ev_binds
, result
) <- checkConstraints skol_info tvs
' given
$
1096 thing_inside tvs
' rho
'
1098 ; return (wrap
<.> mkWpLet ev_binds
, result
) }
1099 -- The ev_binds returned by checkConstraints is very
1100 -- often empty, in which case mkWpLet is a no-op
1102 -- | Variant of 'tcSkolemise' that takes an ExpType
1103 tcSkolemiseET
:: UserTypeCtxt
-> ExpSigmaType
1104 -> (ExpRhoType
-> TcM result
)
1105 -> TcM
(HsWrapper
, result
)
1106 tcSkolemiseET _ et
@(Infer
{}) thing_inside
1107 = (idHsWrapper
, ) <$> thing_inside et
1108 tcSkolemiseET ctxt
(Check ty
) thing_inside
1109 = tcSkolemise ctxt ty
$ \_
-> thing_inside
. mkCheckExpType
1111 checkConstraints
:: SkolemInfo
1112 -> [TcTyVar
] -- Skolems
1115 -> TcM
(TcEvBinds
, result
)
1117 checkConstraints skol_info skol_tvs given thing_inside
1118 = do { implication_needed
<- implicationNeeded skol_tvs given
1120 ; if implication_needed
1121 then do { (tclvl
, wanted
, result
) <- pushLevelAndCaptureConstraints thing_inside
1122 ; (implics
, ev_binds
) <- buildImplicationFor tclvl skol_info skol_tvs given wanted
1123 ; traceTc
"checkConstraints" (ppr tclvl
$$ ppr skol_tvs
)
1124 ; emitImplications implics
1125 ; return (ev_binds
, result
) }
1127 else -- Fast path. We check every function argument with
1128 -- tcPolyExpr, which uses tcSkolemise and hence checkConstraints.
1129 -- So this fast path is well-exercised
1130 do { res
<- thing_inside
1131 ; return (emptyTcEvBinds
, res
) } }
1133 checkTvConstraints
:: SkolemInfo
1134 -> Maybe SDoc
-- User-written telescope, if present
1135 -> TcM
([TcTyVar
], result
)
1136 -> TcM
([TcTyVar
], result
)
1138 checkTvConstraints skol_info m_telescope thing_inside
1139 = do { (tclvl
, wanted
, (skol_tvs
, result
))
1140 <- pushLevelAndCaptureConstraints thing_inside
1142 ; if isEmptyWC wanted
1144 else do { tc_lcl_env
<- getLclEnv
1145 ; ev_binds
<- newNoTcEvBinds
1147 newImplication
{ ic_tclvl
= tclvl
1148 , ic_skols
= skol_tvs
1150 , ic_telescope
= m_telescope
1151 , ic_wanted
= wanted
1152 , ic_binds
= ev_binds
1153 , ic_info
= skol_info
1154 , ic_env
= tc_lcl_env
} }
1155 ; return (skol_tvs
, result
) }
1158 implicationNeeded
:: [TcTyVar
] -> [EvVar
] -> TcM
Bool
1159 -- With the solver producing unlifted equalities, we need
1160 -- to have an EvBindsVar for them when they might be deferred to
1161 -- runtime. Otherwise, they end up as top-level unlifted bindings,
1162 -- which are verboten. See also Note [Deferred errors for coercion holes]
1163 -- in TcErrors. cf Trac #14149 for an example of what goes wrong.
1164 implicationNeeded skol_tvs given
1167 = -- Empty skolems and givens
1168 do { tc_lvl
<- getTcLevel
1169 ; if not (isTopTcLevel tc_lvl
) -- No implication needed if we are
1170 then return False -- already inside an implication
1172 do { dflags
<- getDynFlags
-- If any deferral can happen,
1173 -- we must build an implication
1174 ; return (gopt Opt_DeferTypeErrors dflags ||
1175 gopt Opt_DeferTypedHoles dflags ||
1176 gopt Opt_DeferOutOfScopeVariables dflags
) } }
1178 |
otherwise -- Non-empty skolems or givens
1179 = return True -- Definitely need an implication
1181 buildImplicationFor
:: TcLevel
-> SkolemInfo
-> [TcTyVar
]
1182 -> [EvVar
] -> WantedConstraints
1183 -> TcM
(Bag Implication
, TcEvBinds
)
1184 buildImplicationFor tclvl skol_info skol_tvs given wanted
1185 | isEmptyWC wanted
&& null given
1186 -- Optimisation : if there are no wanteds, and no givens
1187 -- don't generate an implication at all.
1188 -- Reason for the (null given): we don't want to lose
1189 -- the "inaccessible alternative" error check
1190 = return (emptyBag
, emptyTcEvBinds
)
1193 = ASSERT2
( all (isSkolemTyVar
<||
> isSigTyVar
) skol_tvs
, ppr skol_tvs
)
1194 -- Why allow SigTvs? Because implicitly declared kind variables in
1195 -- non-CUSK type declarations are SigTvs, and we need to bring them
1196 -- into scope as a skolem in an implication. This is OK, though,
1197 -- because SigTvs will always remain tyvars, even after unification.
1198 do { ev_binds_var
<- newTcEvBinds
1200 ; let implic
= newImplication
{ ic_tclvl
= tclvl
1201 , ic_skols
= skol_tvs
1203 , ic_wanted
= wanted
1204 , ic_binds
= ev_binds_var
1206 , ic_info
= skol_info
}
1208 ; return (unitBag implic
, TcEvBinds ev_binds_var
) }
1211 ************************************************************************
1215 ************************************************************************
1217 The exported functions are all defined as versions of some
1218 non-exported generic functions.
1221 unifyType
:: Maybe (HsExpr GhcRn
) -- ^ If present, has type 'ty1'
1222 -> TcTauType
-> TcTauType
-> TcM TcCoercionN
1223 -- Actual and expected types
1224 -- Returns a coercion : ty1 ~ ty2
1225 unifyType thing ty1 ty2
= traceTc
"utype" (ppr ty1
$$ ppr ty2
$$ ppr thing
) >>
1226 uType TypeLevel origin ty1 ty2
1228 origin
= TypeEqOrigin
{ uo_actual
= ty1
, uo_expected
= ty2
1229 , uo_thing
= ppr
<$> thing
1230 , uo_visible
= True } -- always called from a visible context
1232 unifyKind
:: Maybe (HsType GhcRn
) -> TcKind
-> TcKind
-> TcM CoercionN
1233 unifyKind thing ty1 ty2
= traceTc
"ukind" (ppr ty1
$$ ppr ty2
$$ ppr thing
) >>
1234 uType KindLevel origin ty1 ty2
1235 where origin
= TypeEqOrigin
{ uo_actual
= ty1
, uo_expected
= ty2
1236 , uo_thing
= ppr
<$> thing
1237 , uo_visible
= True } -- also always from a visible context
1240 unifyPred
:: PredType
-> PredType
-> TcM TcCoercionN
1241 -- Actual and expected types
1242 unifyPred
= unifyType Nothing
1245 unifyTheta
:: TcThetaType
-> TcThetaType
-> TcM
[TcCoercionN
]
1246 -- Actual and expected types
1247 unifyTheta theta1 theta2
1248 = do { checkTc
(equalLength theta1 theta2
)
1249 (vcat
[text
"Contexts differ in length",
1250 nest
2 $ parens
$ text
"Use RelaxedPolyRec to allow this"])
1251 ; zipWithM unifyPred theta1 theta2
}
1254 %************************************************************************
1258 %************************************************************************
1260 uType is the heart of the unifier.
1266 -> TcType
-- ty1 is the *actual* type
1267 -> TcType
-- ty2 is the *expected* type
1271 -- It is always safe to defer unification to the main constraint solver
1272 -- See Note [Deferred unification]
1273 uType_defer t_or_k origin ty1 ty2
1274 = do { co
<- emitWantedEq origin t_or_k Nominal ty1 ty2
1277 -- NB. do *not* call mkErrInfo unless tracing is on,
1278 -- because it is hugely expensive (#5631)
1279 ; whenDOptM Opt_D_dump_tc_trace
$ do
1280 { ctxt
<- getErrCtxt
1281 ; doc
<- mkErrInfo emptyTidyEnv ctxt
1282 ; traceTc
"utype_defer" (vcat
[ debugPprType ty1
1284 , pprCtOrigin origin
1286 ; traceTc
"utype_defer2" (ppr co
)
1291 uType t_or_k origin orig_ty1 orig_ty2
1292 = do { tclvl
<- getTcLevel
1293 ; traceTc
"u_tys" $ vcat
1294 [ text
"tclvl" <+> ppr tclvl
1295 , sep
[ ppr orig_ty1
, text
"~", ppr orig_ty2
]
1296 , pprCtOrigin origin
]
1297 ; co
<- go orig_ty1 orig_ty2
1299 then traceTc
"u_tys yields no coercion" Outputable
.empty
1300 else traceTc
"u_tys yields coercion:" (ppr co
)
1303 go
:: TcType
-> TcType
-> TcM CoercionN
1304 -- The arguments to 'go' are always semantically identical
1305 -- to orig_ty{1,2} except for looking through type synonyms
1307 -- Variables; go for uVar
1308 -- Note that we pass in *original* (before synonym expansion),
1309 -- so that type variables tend to get filled in with
1310 -- the most informative version of the type
1311 go
(TyVarTy tv1
) ty2
1312 = do { lookup_res
<- lookupTcTyVar tv1
1313 ; case lookup_res
of
1314 Filled ty1
-> do { traceTc
"found filled tyvar" (ppr tv1
<+> text
":->" <+> ppr ty1
)
1316 Unfilled _
-> uUnfilledVar origin t_or_k NotSwapped tv1 ty2
}
1317 go ty1
(TyVarTy tv2
)
1318 = do { lookup_res
<- lookupTcTyVar tv2
1319 ; case lookup_res
of
1320 Filled ty2
-> do { traceTc
"found filled tyvar" (ppr tv2
<+> text
":->" <+> ppr ty2
)
1322 Unfilled _
-> uUnfilledVar origin t_or_k IsSwapped tv2 ty1
}
1324 -- See Note [Expanding synonyms during unification]
1325 go ty1
@(TyConApp tc1
[]) (TyConApp tc2
[])
1327 = return $ mkNomReflCo ty1
1329 go
(CastTy t1 co1
) t2
1330 = do { co_tys
<- go t1 t2
1331 ; return (mkCoherenceLeftCo Nominal t1 co1 co_tys
) }
1333 go t1
(CastTy t2 co2
)
1334 = do { co_tys
<- go t1 t2
1335 ; return ( mkCoherenceRightCo Nominal t2 co2 co_tys
) }
1337 -- See Note [Expanding synonyms during unification]
1339 -- Also NB that we recurse to 'go' so that we don't push a
1340 -- new item on the origin stack. As a result if we have
1342 -- and we try to unify Foo ~ Bool
1343 -- we'll end up saying "can't match Foo with Bool"
1344 -- rather than "can't match "Int with Bool". See Trac #4535.
1346 | Just ty1
' <- tcView ty1
= go ty1
' ty2
1347 | Just ty2
' <- tcView ty2
= go ty1 ty2
'
1349 -- Functions (or predicate functions) just check the two parts
1350 go
(FunTy fun1 arg1
) (FunTy fun2 arg2
)
1351 = do { co_l
<- uType t_or_k origin fun1 fun2
1352 ; co_r
<- uType t_or_k origin arg1 arg2
1353 ; return $ mkFunCo Nominal co_l co_r
}
1355 -- Always defer if a type synonym family (type function)
1356 -- is involved. (Data families behave rigidly.)
1357 go ty1
@(TyConApp tc1 _
) ty2
1358 | isTypeFamilyTyCon tc1
= defer ty1 ty2
1359 go ty1 ty2
@(TyConApp tc2 _
)
1360 | isTypeFamilyTyCon tc2
= defer ty1 ty2
1362 go
(TyConApp tc1 tys1
) (TyConApp tc2 tys2
)
1363 -- See Note [Mismatched type lists and application decomposition]
1364 | tc1
== tc2
, equalLength tys1 tys2
1365 = ASSERT2
( isGenerativeTyCon tc1 Nominal
, ppr tc1
)
1366 do { cos <- zipWith3M
(uType t_or_k
) origins
' tys1 tys2
1367 ; return $ mkTyConAppCo Nominal tc1
cos }
1369 origins
' = map (\is_vis
-> if is_vis
then origin
else toInvisibleOrigin origin
)
1370 (tcTyConVisibilities tc1
)
1372 go
(LitTy m
) ty
@(LitTy n
)
1374 = return $ mkNomReflCo ty
1376 -- See Note [Care with type applications]
1377 -- Do not decompose FunTy against App;
1378 -- it's often a type error, so leave it for the constraint solver
1379 go
(AppTy s1 t1
) (AppTy s2 t2
)
1380 = go_app
(isNextArgVisible s1
) s1 t1 s2 t2
1382 go
(AppTy s1 t1
) (TyConApp tc2 ts2
)
1383 | Just
(ts2
', t2
') <- snocView ts2
1384 = ASSERT
( mightBeUnsaturatedTyCon tc2
)
1385 go_app
(isNextTyConArgVisible tc2 ts2
') s1 t1
(TyConApp tc2 ts2
') t2
'
1387 go
(TyConApp tc1 ts1
) (AppTy s2 t2
)
1388 | Just
(ts1
', t1
') <- snocView ts1
1389 = ASSERT
( mightBeUnsaturatedTyCon tc1
)
1390 go_app
(isNextTyConArgVisible tc1 ts1
') (TyConApp tc1 ts1
') t1
' s2 t2
1392 go
(CoercionTy co1
) (CoercionTy co2
)
1393 = do { let ty1
= coercionType co1
1394 ty2
= coercionType co2
1395 ; kco
<- uType KindLevel
1396 (KindEqOrigin orig_ty1
(Just orig_ty2
) origin
1399 ; return $ mkProofIrrelCo Nominal kco co1 co2
}
1401 -- Anything else fails
1402 -- E.g. unifying for-all types, which is relative unusual
1403 go ty1 ty2
= defer ty1 ty2
1406 defer ty1 ty2
-- See Note [Check for equality before deferring]
1407 | ty1 `tcEqType` ty2
= return (mkNomReflCo ty1
)
1408 |
otherwise = uType_defer t_or_k origin ty1 ty2
1411 go_app vis s1 t1 s2 t2
1412 = do { co_s
<- uType t_or_k origin s1 s2
1415 |
otherwise = toInvisibleOrigin origin
1416 ; co_t
<- uType t_or_k arg_origin t1 t2
1417 ; return $ mkAppCo co_s co_t
}
1419 {- Note [Check for equality before deferring]
1420 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1421 Particularly in ambiguity checks we can get equalities like (ty ~ ty).
1422 If ty involves a type function we may defer, which isn't very sensible.
1423 An egregious example of this was in test T9872a, which has a type signature
1424 Proxy :: Proxy (Solutions Cubes)
1425 Doing the ambiguity check on this signature generates the equality
1426 Solutions Cubes ~ Solutions Cubes
1427 and currently the constraint solver normalises both sides at vast cost.
1428 This little short-cut in 'defer' helps quite a bit.
1430 Note [Care with type applications]
1431 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1432 Note: type applications need a bit of care!
1433 They can match FunTy and TyConApp, so use splitAppTy_maybe
1434 NB: we've already dealt with type variables and Notes,
1435 so if one type is an App the other one jolly well better be too
1437 Note [Mismatched type lists and application decomposition]
1438 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1439 When we find two TyConApps, you might think that the argument lists
1440 are guaranteed equal length. But they aren't. Consider matching
1441 w (T x) ~ Foo (T x y)
1442 We do match (w ~ Foo) first, but in some circumstances we simply create
1443 a deferred constraint; and then go ahead and match (T x ~ T x y).
1444 This came up in Trac #3950.
1447 (a) either we must check for identical argument kinds
1448 when decomposing applications,
1450 (b) or we must be prepared for ill-kinded unification sub-problems
1452 Currently we adopt (b) since it seems more robust -- no need to maintain
1455 Note [Expanding synonyms during unification]
1456 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1457 We expand synonyms during unification, but:
1458 * We expand *after* the variable case so that we tend to unify
1459 variables with un-expanded type synonym. This just makes it
1460 more likely that the inferred types will mention type synonyms
1461 understandable to the user
1463 * Similarly, we expand *after* the CastTy case, just in case the
1464 CastTy wraps a variable.
1466 * We expand *before* the TyConApp case. For example, if we have
1467 type Phantom a = Int
1469 Phantom Int ~ Phantom Char
1470 it is *wrong* to unify Int and Char.
1472 * The problem case immediately above can happen only with arguments
1473 to the tycon. So we check for nullary tycons *before* expanding.
1474 This is particularly helpful when checking (* ~ *), because * is
1477 Note [Deferred Unification]
1478 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1479 We may encounter a unification ty1 ~ ty2 that cannot be performed syntactically,
1480 and yet its consistency is undetermined. Previously, there was no way to still
1481 make it consistent. So a mismatch error was issued.
1483 Now these unifications are deferred until constraint simplification, where type
1484 family instances and given equations may (or may not) establish the consistency.
1485 Deferred unifications are of the form
1488 where F is a type function and x is a type variable.
1490 id :: x ~ y => x -> y
1493 involves the unification x = y. It is deferred until we bring into account the
1494 context x ~ y to establish that it holds.
1496 If available, we defer original types (rather than those where closed type
1497 synonyms have already been expanded via tcCoreView). This is, as usual, to
1498 improve error messages.
1501 ************************************************************************
1505 ************************************************************************
1507 @uVar@ is called when at least one of the types being unified is a
1508 variable. It does {\em not} assume that the variable is a fixed point
1509 of the substitution; rather, notice that @uVar@ (defined below) nips
1510 back into @uTys@ if it turns out that the variable is already bound.
1514 uUnfilledVar
:: CtOrigin
1517 -> TcTyVar
-- Tyvar 1
1518 -> TcTauType
-- Type 2
1520 -- "Unfilled" means that the variable is definitely not a filled-in meta tyvar
1521 -- It might be a skolem, or untouchable, or meta
1523 uUnfilledVar origin t_or_k swapped tv1 ty2
1524 = do { ty2
<- zonkTcType ty2
1525 -- Zonk to expose things to the
1526 -- occurs check, and so that if ty2
1527 -- looks like a type variable then it
1528 -- /is/ a type variable
1529 ; uUnfilledVar1 origin t_or_k swapped tv1 ty2
}
1532 uUnfilledVar1
:: CtOrigin
1535 -> TcTyVar
-- Tyvar 1
1536 -> TcTauType
-- Type 2, zonked
1538 uUnfilledVar1 origin t_or_k swapped tv1 ty2
1539 | Just tv2
<- tcGetTyVar_maybe ty2
1543 = uUnfilledVar2 origin t_or_k swapped tv1 ty2
1546 -- 'go' handles the case where both are
1547 -- tyvars so we might want to swap
1548 go tv2 | tv1
== tv2
-- Same type variable => no-op
1549 = return (mkNomReflCo
(mkTyVarTy tv1
))
1551 | swapOverTyVars tv1 tv2
-- Distinct type variables
1552 = uUnfilledVar2 origin t_or_k
(flipSwap swapped
)
1556 = uUnfilledVar2 origin t_or_k swapped tv1 ty2
1559 uUnfilledVar2
:: CtOrigin
1562 -> TcTyVar
-- Tyvar 1
1563 -> TcTauType
-- Type 2, zonked
1565 uUnfilledVar2 origin t_or_k swapped tv1 ty2
1566 = do { dflags
<- getDynFlags
1567 ; cur_lvl
<- getTcLevel
1568 ; go dflags cur_lvl
}
1571 | canSolveByUnification cur_lvl tv1 ty2
1572 , Just ty2
' <- metaTyVarUpdateOK dflags tv1 ty2
1573 = do { co_k
<- uType KindLevel kind_origin
(typeKind ty2
') (tyVarKind tv1
)
1574 ; traceTc
"uUnfilledVar2 ok" $
1575 vcat
[ ppr tv1
<+> dcolon
<+> ppr
(tyVarKind tv1
)
1576 , ppr ty2
<+> dcolon
<+> ppr
(typeKind ty2
)
1577 , ppr
(isTcReflCo co_k
), ppr co_k
]
1579 ; if isTcReflCo co_k
-- only proceed if the kinds matched.
1581 then do { writeMetaTyVar tv1 ty2
'
1582 ; return (mkTcNomReflCo ty2
') }
1584 else defer
} -- This cannot be solved now. See TcCanonical
1585 -- Note [Equalities with incompatible kinds]
1588 = do { traceTc
"uUnfilledVar2 not ok" (ppr tv1
$$ ppr ty2
)
1589 -- Occurs check or an untouchable: just defer
1590 -- NB: occurs check isn't necessarily fatal:
1591 -- eg tv1 occured in type family parameter
1595 kind_origin
= KindEqOrigin ty1
(Just ty2
) origin
(Just t_or_k
)
1597 defer
= unSwap swapped
(uType_defer t_or_k origin
) ty1 ty2
1599 swapOverTyVars
:: TcTyVar
-> TcTyVar
-> Bool
1600 swapOverTyVars tv1 tv2
1601 -- Level comparison: see Note [TyVar/TyVar orientation]
1602 | lvl1 `strictlyDeeperThan` lvl2
= False
1603 | lvl2 `strictlyDeeperThan` lvl1
= True
1605 -- Priority: see Note [TyVar/TyVar orientation]
1606 | pri1
> pri2
= False
1607 | pri2
> pri1
= True
1609 -- Names: see Note [TyVar/TyVar orientation]
1610 | isSystemName tv2_name
, not (isSystemName tv1_name
) = True
1615 lvl1
= tcTyVarLevel tv1
1616 lvl2
= tcTyVarLevel tv2
1617 pri1
= lhsPriority tv1
1618 pri2
= lhsPriority tv2
1619 tv1_name
= Var
.varName tv1
1620 tv2_name
= Var
.varName tv2
1623 lhsPriority
:: TcTyVar
-> Int
1624 -- Higher => more important to be on the LHS
1625 -- See Note [TyVar/TyVar orientation]
1627 = ASSERT2
( isTyVar tv
, ppr tv
)
1628 case tcTyVarDetails tv
of
1631 MetaTv
{ mtv_info
= info
} -> case info
of
1636 {- Note [TyVar/TyVar orientation]
1637 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1638 Given (a ~ b), should we orient the CTyEqCan as (a~b) or (b~a)?
1639 This is a surprisingly tricky question!
1641 First note: only swap if you have to!
1642 See Note [Avoid unnecessary swaps]
1644 So we look for a positive reason to swap, using a three-step test:
1646 * Level comparison. If 'a' has deeper level than 'b',
1647 put 'a' on the left. See Note [Deeper level on the left]
1649 * Priority. If the levels are the same, look at what kind of
1650 type variable it is, using 'lhsPriority'
1652 - FlatMetaTv: Always put on the left.
1653 See Note [Fmv Orientation Invariant]
1654 NB: FlatMetaTvs always have the current level, never an
1655 outer one. So nothing can be deeper than a FlatMetaTv
1658 - SigTv/TauTv: if we have sig_tv ~ tau_tv, put tau_tv
1659 on the left because there are fewer
1660 restrictions on updating TauTvs
1662 - SigTv/TauTv: put on the left eitehr
1663 a) Because it's touchable and can be unified, or
1664 b) Even if it's not touchable, TcSimplify.floatEqualities
1665 looks for meta tyvars on the left
1667 - FlatSkolTv: Put on the left in preference to a SkolemTv
1668 See Note [Eliminate flat-skols]
1670 * Names. If the level and priority comparisons are all
1671 equal, try to eliminate a TyVars with a System Name in
1672 favour of ones with a Name derived from a user type signature
1674 * Age. At one point in the past we tried to break any remaining
1675 ties by eliminating the younger type variable, based on their
1676 Uniques. See Note [Eliminate younger unification variables]
1677 (which also explains why we don't do this any more)
1679 Note [Deeper level on the left]
1680 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1681 The most important thing is that we want to put tyvars with
1682 the deepest level on the left. The reason to do so differs for
1683 Wanteds and Givens, but either way, deepest wins! Simple.
1685 * Wanteds. Putting the deepest variable on the left maximise the
1686 chances that it's a touchable meta-tyvar which can be solved.
1688 * Givens. Suppose we have something like
1689 forall a[2]. b[1] ~ a[2] => beta[1] ~ a[2]
1691 If we orient the Given a[2] on the left, we'll rewrite the Wanted to
1692 (beta[1] ~ b[1]), and that can float out of the implication.
1693 Otherwise it can't. By putting the deepest variable on the left
1694 we maximise our changes of elminating skolem capture.
1696 See also TcSMonad Note [Let-bound skolems] for another reason
1697 to orient with the deepest skolem on the left.
1699 IMPORTANT NOTE: this test does a level-number comparison on
1700 skolems, so it's important that skolems have (accurate) level
1703 See Trac #15009 for an further analysis of why "deepest on the left"
1706 Note [Fmv Orientation Invariant]
1707 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1708 * We always orient a constraint
1710 with fmv on the left, even if alpha is
1711 a touchable unification variable
1713 Reason: doing it the other way round would unify alpha:=fmv, but that
1714 really doesn't add any info to alpha. But a later constraint alpha ~
1715 Int might unlock everything. Comment:9 of #12526 gives a detailed
1718 WARNING: I've gone to and fro on this one several times.
1719 I'm now pretty sure that unifying alpha:=fmv is a bad idea!
1720 So orienting with fmvs on the left is a good thing.
1722 This example comes from IndTypesPerfMerge. (Others include
1724 From the ambiguity check for
1728 [WD] F alpha ~ alpha, alpha ~ a
1731 [G] F a ~ fsk, fsk ~ a
1733 Now if we flatten we get
1734 [WD] alpha ~ fmv, F alpha ~ fmv, alpha ~ a
1736 Now, if we unified alpha := fmv, we'd get
1737 [WD] F fmv ~ fmv, [WD] fmv ~ a
1738 And now we are stuck.
1740 So instead the Fmv Orientation Invariant puts the fmv on the
1742 [WD] fmv ~ alpha, [WD] F alpha ~ fmv, [WD] alpha ~ a
1744 Now we get alpha:=a, and everything works out
1746 Note [Eliminate flat-skols]
1747 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1748 Suppose we have [G] Num (F [a])
1752 where fsk is a flatten-skolem (FlatSkolTv). Suppose we have
1753 type instance F [a] = a
1754 then we'll reduce the second constraint to
1756 and then replace all uses of 'a' with fsk. That's bad because
1757 in error messages intead of saying 'a' we'll say (F [a]). In all
1758 places, including those where the programmer wrote 'a' in the first
1759 place. Very confusing! See Trac #7862.
1761 Solution: re-orient a~fsk to fsk~a, so that we preferentially eliminate
1764 Note [Avoid unnecessary swaps]
1765 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1766 If we swap without actually improving matters, we can get an infinite loop.
1770 We canonicalise the work-item to (a ~ c). If we then swap it before
1771 adding to the inert set, we'll add (c ~ a), and therefore kick out the
1772 inert guy, so we get
1773 new work item: b ~ c
1775 And now the cycle just repeats
1777 Note [Eliminate younger unification variables]
1778 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1779 Given a choice of unifying
1780 alpha := beta or beta := alpha
1781 we try, if possible, to eliminate the "younger" one, as determined
1782 by `ltUnique`. Reason: the younger one is less likely to appear free in
1783 an existing inert constraint, and hence we are less likely to be forced
1784 into kicking out and rewriting inert constraints.
1786 This is a performance optimisation only. It turns out to fix
1787 Trac #14723 all by itself, but clearly not reliably so!
1789 It's simple to implement (see nicer_to_update_tv2 in swapOverTyVars).
1790 But, to my surprise, it didn't seem to make any significant difference
1791 to the compiler's performance, so I didn't take it any further. Still
1792 it seemed to too nice to discard altogether, so I'm leaving these
1796 -- @trySpontaneousSolve wi@ solves equalities where one side is a
1797 -- touchable unification variable.
1798 -- Returns True <=> spontaneous solve happened
1799 canSolveByUnification
:: TcLevel
-> TcTyVar
-> TcType
-> Bool
1800 canSolveByUnification tclvl tv xi
1801 | isTouchableMetaTyVar tclvl tv
1802 = case metaTyVarInfo tv
of
1803 SigTv
-> is_tyvar xi
1806 |
otherwise -- Untouchable
1810 = case tcGetTyVar_maybe xi
of
1812 Just tv
-> case tcTyVarDetails tv
of
1813 MetaTv
{ mtv_info
= info
}
1820 {- Note [Prevent unification with type families]
1821 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1822 We prevent unification with type families because of an uneasy compromise.
1823 It's perfectly sound to unify with type families, and it even improves the
1824 error messages in the testsuite. It also modestly improves performance, at
1825 least in some cases. But it's disastrous for test case perf/compiler/T3064.
1826 Here is the problem: Suppose we have (F ty) where we also have [G] F ty ~ a.
1827 What do we do? Do we reduce F? Or do we use the given? Hard to know what's
1828 best. GHC reduces. This is a disaster for T3064, where the type's size
1829 spirals out of control during reduction. (We're not helped by the fact that
1830 the flattener re-flattens all the arguments every time around.) If we prevent
1831 unification with type families, then the solver happens to use the equality
1832 before expanding the type family.
1834 It would be lovely in the future to revisit this problem and remove this
1835 extra, unnecessary check. But we retain it for now as it seems to work
1838 Note [Refactoring hazard: checkTauTvUpdate]
1839 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1840 I (Richard E.) have a sad story about refactoring this code, retained here
1841 to prevent others (or a future me!) from falling into the same traps.
1843 It all started with #11407, which was caused by the fact that the TyVarTy
1844 case of defer_me didn't look in the kind. But it seemed reasonable to
1845 simply remove the defer_me check instead.
1847 It referred to two Notes (since removed) that were out of date, and the
1848 fast_check code in occurCheckExpand seemed to do just about the same thing as
1849 defer_me. The one piece that defer_me did that wasn't repeated by
1850 occurCheckExpand was the type-family check. (See Note [Prevent unification
1851 with type families].) So I checked the result of occurCheckExpand for any
1852 type family occurrences and deferred if there were any. This was done
1853 in commit e9bf7bb5cc9fb3f87dd05111aa23da76b86a8967 .
1855 This approach turned out not to be performant, because the expanded
1856 type was bigger than the original type, and tyConsOfType (needed to
1857 see if there are any type family occurrences) looks through type
1858 synonyms. So it then struck me that we could dispense with the
1859 defer_me check entirely. This simplified the code nicely, and it cut
1860 the allocations in T5030 by half. But, as documented in Note [Prevent
1861 unification with type families], this destroyed performance in
1862 T3064. Regardless, I missed this regression and the change was
1863 committed as 3f5d1a13f112f34d992f6b74656d64d95a3f506d .
1866 * defer_me is back, but now fixed w.r.t. #11407.
1867 * Tread carefully before you start to refactor here. There can be
1868 lots of hard-to-predict consequences.
1870 Note [Type synonyms and the occur check]
1871 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1872 Generally speaking we try to update a variable with type synonyms not
1873 expanded, which improves later error messages, unless looking
1874 inside a type synonym may help resolve a spurious occurs check
1878 f :: (A a -> a -> ()) -> ()
1882 x = f (\ x p -> p x)
1884 We will eventually get a constraint of the form t ~ A t. The ok function above will
1885 properly expand the type (A t) to just (), which is ok to be unified with t. If we had
1886 unified with the original type A t, we would lead the type checker into an infinite loop.
1888 Hence, if the occurs check fails for a type synonym application, then (and *only* then),
1889 the ok function expands the synonym to detect opportunities for occurs check success using
1890 the underlying definition of the type synonym.
1892 The same applies later on in the constraint interaction code; see TcInteract,
1893 function @occ_check_ok@.
1895 Note [Non-TcTyVars in TcUnify]
1896 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1897 Because the same code is now shared between unifying types and unifying
1898 kinds, we sometimes will see proper TyVars floating around the unifier.
1899 Example (from test case polykinds/PolyKinds12):
1901 type family Apply (f :: k1 -> k2) (x :: k1) :: k2
1902 type instance Apply g y = g y
1904 When checking the instance declaration, we first *kind-check* the LHS
1905 and RHS, discovering that the instance really should be
1907 type instance Apply k3 k4 (g :: k3 -> k4) (y :: k3) = g y
1909 During this kind-checking, all the tyvars will be TcTyVars. Then, however,
1910 as a second pass, we desugar the RHS (which is done in functions prefixed
1911 with "tc" in TcTyClsDecls"). By this time, all the kind-vars are proper
1912 TyVars, not TcTyVars, get some kind unification must happen.
1914 Thus, we always check if a TyVar is a TcTyVar before asking if it's a
1917 This used to not be necessary for type-checking (that is, before * :: *)
1918 because expressions get desugared via an algorithm separate from
1919 type-checking (with wrappers, etc.). Types get desugared very differently,
1920 causing this wibble in behavior seen here.
1923 data LookupTyVarResult
-- The result of a lookupTcTyVar call
1924 = Unfilled TcTyVarDetails
-- SkolemTv or virgin MetaTv
1927 lookupTcTyVar
:: TcTyVar
-> TcM LookupTyVarResult
1929 | MetaTv
{ mtv_ref
= ref
} <- details
1930 = do { meta_details
<- readMutVar ref
1931 ; case meta_details
of
1932 Indirect ty
-> return (Filled ty
)
1933 Flexi
-> do { is_touchable
<- isTouchableTcM tyvar
1934 -- Note [Unifying untouchables]
1935 ; if is_touchable
then
1936 return (Unfilled details
)
1938 return (Unfilled vanillaSkolemTv
) } }
1940 = return (Unfilled details
)
1942 details
= tcTyVarDetails tyvar
1945 Note [Unifying untouchables]
1946 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1947 We treat an untouchable type variable as if it was a skolem. That
1948 ensures it won't unify with anything. It's a slight hack, because
1949 we return a made-up TcTyVarDetails, but I think it works smoothly.
1952 -- | Breaks apart a function kind into its pieces.
1953 matchExpectedFunKind
:: Outputable fun
1954 => fun
-- ^ type, only for errors
1955 -> TcKind
-- ^ function kind
1956 -> TcM
(Coercion
, TcKind
, TcKind
)
1957 -- ^ co :: old_kind ~ arg -> res
1958 matchExpectedFunKind hs_ty
= go
1960 go k | Just k
' <- tcView k
= go k
'
1964 = do { maybe_kind
<- readMetaTyVar kvar
1965 ; case maybe_kind
of
1966 Indirect fun_kind
-> go fun_kind
1969 go k
@(FunTy arg res
) = return (mkNomReflCo k
, arg
, res
)
1970 go other
= defer other
1973 = do { arg_kind
<- newMetaKindVar
1974 ; res_kind
<- newMetaKindVar
1975 ; let new_fun
= mkFunTy arg_kind res_kind
1976 origin
= TypeEqOrigin
{ uo_actual
= k
1977 , uo_expected
= new_fun
1978 , uo_thing
= Just
(ppr hs_ty
)
1981 ; co
<- uType KindLevel origin k new_fun
1982 ; return (co
, arg_kind
, res_kind
) }
1985 {- *********************************************************************
1989 ********************************************************************* -}
1992 {- Note [Occurrence checking: look inside kinds]
1993 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1994 Suppose we are considering unifying
1995 (alpha :: *) ~ Int -> (beta :: alpha -> alpha)
1996 This may be an error (what is that alpha doing inside beta's kind?),
1997 but we must not make the mistake of actuallyy unifying or we'll
1998 build an infinite data structure. So when looking for occurrences
1999 of alpha in the rhs, we must look in the kinds of type variables
2002 NB: we may be able to remove the problem via expansion; see
2003 Note [Occurs check expansion]. So we have to try that.
2005 Note [Checking for foralls]
2006 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2007 Unless we have -XImpredicativeTypes (which is a totally unsupported
2008 feature), we do not want to unify
2009 alpha ~ (forall a. a->a) -> Int
2010 So we look for foralls hidden inside the type, and it's convenient
2011 to do that at the same time as the occurs check (which looks for
2012 occurrences of alpha).
2014 However, it's not just a question of looking for foralls /anywhere/!
2016 (alpha :: forall k. k->*) ~ (beta :: forall k. k->*)
2017 This is legal; e.g. dependent/should_compile/T11635.
2019 We don't want to reject it because of the forall in beta's kind,
2020 but (see Note [Occurrence checking: look inside kinds]) we do
2021 need to look in beta's kind. So we carry a flag saying if a 'forall'
2022 is OK, and sitch the flag on when stepping inside a kind.
2024 Why is it OK? Why does it not count as impredicative polymorphism?
2025 The reason foralls are bad is because we reply on "seeing" foralls
2026 when doing implicit instantiation. But the forall inside the kind is
2027 fine. We'll generate a kind equality constraint
2028 (forall k. k->*) ~ (forall k. k->*)
2029 to check that the kinds of lhs and rhs are compatible. If alpha's
2030 kind had instead been
2032 then this kind equality would rightly complain about unifying kappa
2033 with (forall k. k->*)
2037 data OccCheckResult a
2039 | OC_Bad
-- Forall or type family
2042 instance Functor OccCheckResult
where
2045 instance Applicative OccCheckResult
where
2049 instance Monad OccCheckResult
where
2051 OC_Bad
>>= _
= OC_Bad
2052 OC_Occurs
>>= _
= OC_Occurs
2054 occCheckForErrors
:: DynFlags
-> TcTyVar
-> Type
-> OccCheckResult
()
2055 -- Just for error-message generation; so we return OccCheckResult
2056 -- so the caller can report the right kind of error
2058 -- a) the given variable occurs in the given type.
2059 -- b) there is a forall in the type (unless we have -XImpredicativeTypes)
2060 occCheckForErrors dflags tv ty
2061 = case preCheck dflags
True tv ty
of
2064 OC_Occurs
-> case occCheckExpand
[tv
] ty
of
2065 Nothing
-> OC_Occurs
2069 metaTyVarUpdateOK
:: DynFlags
2070 -> TcTyVar
-- tv :: k1
2071 -> TcType
-- ty :: k2
2072 -> Maybe TcType
-- possibly-expanded ty
2073 -- (metaTyFVarUpdateOK tv ty)
2074 -- We are about to update the meta-tyvar tv with ty
2075 -- Check (a) that tv doesn't occur in ty (occurs check)
2076 -- (b) that ty does not have any foralls
2077 -- (in the impredicative case), or type functions
2079 -- We have two possible outcomes:
2080 -- (1) Return the type to update the type variable with,
2081 -- [we know the update is ok]
2082 -- (2) Return Nothing,
2083 -- [the update might be dodgy]
2085 -- Note that "Nothing" does not mean "definite error". For example
2087 -- type instance F Int = Int
2090 -- This is perfectly reasonable, if we later get a ~ Int. For now, though,
2091 -- we return Nothing, leaving it to the later constraint simplifier to
2092 -- sort matters out.
2094 -- See Note [Refactoring hazard: checkTauTvUpdate]
2096 metaTyVarUpdateOK dflags tv ty
2097 = case preCheck dflags
False tv ty
of
2098 -- False <=> type families not ok
2099 -- See Note [Prevent unification with type families]
2101 OC_Bad
-> Nothing
-- forall or type function
2102 OC_Occurs
-> occCheckExpand
[tv
] ty
2104 preCheck
:: DynFlags
-> Bool -> TcTyVar
-> TcType
-> OccCheckResult
()
2105 -- A quick check for
2106 -- (a) a forall type (unless -XImpredivativeTypes)
2107 -- (b) a type family
2108 -- (c) an occurrence of the type variable (occurs check)
2110 -- For (a) and (b) we check only the top level of the type, NOT
2111 -- inside the kinds of variables it mentions. But for (c) we do
2112 -- look in the kinds of course.
2114 preCheck dflags ty_fam_ok tv ty
2117 details
= tcTyVarDetails tv
2118 impredicative_ok
= canUnifyWithPolyType dflags details
2120 ok
:: OccCheckResult
()
2123 fast_check
:: TcType
-> OccCheckResult
()
2124 fast_check
(TyVarTy tv
')
2125 | tv
== tv
' = OC_Occurs
2126 |
otherwise = fast_check_occ
(tyVarKind tv
')
2127 -- See Note [Occurrence checking: look inside kinds]
2129 fast_check
(TyConApp tc tys
)
2130 | bad_tc tc
= OC_Bad
2131 |
otherwise = mapM fast_check tys
>> ok
2132 fast_check
(LitTy
{}) = ok
2133 fast_check
(FunTy a r
) = fast_check a
>> fast_check r
2134 fast_check
(AppTy fun arg
) = fast_check fun
>> fast_check arg
2135 fast_check
(CastTy ty co
) = fast_check ty
>> fast_check_co co
2136 fast_check
(CoercionTy co
) = fast_check_co co
2137 fast_check
(ForAllTy
(TvBndr tv
' _
) ty
)
2138 |
not impredicative_ok
= OC_Bad
2140 |
otherwise = do { fast_check_occ
(tyVarKind tv
')
2141 ; fast_check_occ ty
}
2142 -- Under a forall we look only for occurrences of
2143 -- the type variable
2145 -- For kinds, we only do an occurs check; we do not worry
2146 -- about type families or foralls
2147 -- See Note [Checking for foralls]
2148 fast_check_occ k | tv `elemVarSet` tyCoVarsOfType k
= OC_Occurs
2151 -- For coercions, we are only doing an occurs check here;
2152 -- no bother about impredicativity in coercions, as they're
2154 fast_check_co co | tv `elemVarSet` tyCoVarsOfCo co
= OC_Occurs
2157 bad_tc
:: TyCon
-> Bool
2159 |
not (impredicative_ok || isTauTyCon tc
) = True
2160 |
not (ty_fam_ok || isFamFreeTyCon tc
) = True
2163 canUnifyWithPolyType
:: DynFlags
-> TcTyVarDetails
-> Bool
2164 canUnifyWithPolyType dflags details
2166 MetaTv
{ mtv_info
= SigTv
} -> False
2167 MetaTv
{ mtv_info
= TauTv
} -> xopt LangExt
.ImpredicativeTypes dflags
2169 -- We can have non-meta tyvars in given constraints