Super-monster patch implementing the new typechecker -- at last
[ghc-hetmet.git] / compiler / types / FunDeps.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 2000
4 %
5
6 FunDeps - functional dependencies
7
8 It's better to read it as: "if we know these, then we're going to know these"
9
10 \begin{code}
11 module FunDeps (
12         Equation, pprEquation, 
13         oclose, improveFromInstEnv, improveFromAnother,
14         checkInstCoverage, checkFunDeps,
15         pprFundeps
16     ) where
17
18 #include "HsVersions.h"
19
20 import Name
21 import Var
22 import Class
23 import TcType
24 import Unify
25 import InstEnv
26 import VarSet
27 import VarEnv
28 import Outputable
29 import Util
30 import FastString
31
32 import Data.List        ( nubBy )
33 import Data.Maybe       ( isJust )
34 \end{code}
35
36
37 %************************************************************************
38 %*                                                                      *
39 \subsection{Close type variables}
40 %*                                                                      *
41 %************************************************************************
42
43   oclose(vs,C)  The result of extending the set of tyvars vs
44                 using the functional dependencies from C
45
46   grow(vs,C)    The result of extend the set of tyvars vs
47                 using all conceivable links from C.
48
49                 E.g. vs = {a}, C = {H [a] b, K (b,Int) c, Eq e}
50                 Then grow(vs,C) = {a,b,c}
51
52                 Note that grow(vs,C) `superset` grow(vs,simplify(C))
53                 That is, simplfication can only shrink the result of grow.
54
55 Notice that
56    oclose is conservative       v `elem` oclose(vs,C)
57           one way:               => v is definitely fixed by vs
58
59    grow is conservative         if v might be fixed by vs 
60           the other way:        => v `elem` grow(vs,C)
61
62 ----------------------------------------------------------
63 (oclose preds tvs) closes the set of type variables tvs, 
64 wrt functional dependencies in preds.  The result is a superset
65 of the argument set.  For example, if we have
66         class C a b | a->b where ...
67 then
68         oclose [C (x,y) z, C (x,p) q] {x,y} = {x,y,z}
69 because if we know x and y then that fixes z.
70
71 oclose is used (only) when generalising a type T; see extensive
72 notes in TcSimplify.
73
74 Note [Important subtlety in oclose]
75 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76 Consider (oclose (C Int t) {}), where class C a b | a->b
77 Then, since a->b, 't' is fully determined by Int, and the
78 uniform thing is to return {t}.
79
80 However, consider
81         class D a b c | b->c
82         f x = e   -- 'e' generates constraint (D s Int t)
83                   -- \x.e has type s->s
84 Then, if (oclose (D s Int t) {}) = {t}, we'll make the function
85 monomorphic in 't', thus
86         f :: forall s. D s Int t => s -> s
87
88 But if this function is never called, 't' will never be instantiated;
89 the functional dependencies that fix 't' may well be instance decls in
90 some importing module.  But the top-level defaulting of unconstrained
91 type variables will fix t=GHC.Prim.Any, and that's simply a bug.
92
93 Conclusion: oclose only returns a type variable as "fixed" if it 
94 depends on at least one type variable in the input fixed_tvs.
95
96 Remember, it's always sound for oclose to return a smaller set.
97 An interesting example is tcfail093, where we get this inferred type:
98     class C a b | a->b
99     dup :: forall h. (Call (IO Int) h) => () -> Int -> h
100 This is perhaps a bit silly, because 'h' is fixed by the (IO Int);
101 previously GHC rejected this saying 'no instance for Call (IO Int) h'.
102 But it's right on the borderline. If there was an extra, otherwise
103 uninvolved type variable, like 's' in the type of 'f' above, then
104 we must accept the function.  So, for now anyway, we accept 'dup' too.
105
106 \begin{code}
107 oclose :: [PredType] -> TyVarSet -> TyVarSet
108 oclose preds fixed_tvs
109   | null tv_fds             = fixed_tvs    -- Fast escape hatch for common case
110   | isEmptyVarSet fixed_tvs = emptyVarSet  -- Note [Important subtlety in oclose]
111   | otherwise               = loop fixed_tvs
112   where
113     loop fixed_tvs
114         | new_fixed_tvs `subVarSet` fixed_tvs = fixed_tvs
115         | otherwise                           = loop new_fixed_tvs
116         where
117           new_fixed_tvs = foldl extend fixed_tvs tv_fds
118
119     extend fixed_tvs (ls,rs) 
120         | not (isEmptyVarSet ls)        -- Note [Important subtlety in oclose]
121         , ls `subVarSet` fixed_tvs = fixed_tvs `unionVarSet` rs
122         | otherwise                = fixed_tvs
123
124     tv_fds  :: [(TyVarSet,TyVarSet)]
125         -- In our example, tv_fds will be [ ({x,y}, {z}), ({x,p},{q}) ]
126         -- Meaning "knowing x,y fixes z, knowing x,p fixes q"
127     tv_fds  = [ (tyVarsOfTypes xs, tyVarsOfTypes ys)
128               | ClassP cls tys <- preds,                -- Ignore implicit params
129                 let (cls_tvs, cls_fds) = classTvsFds cls,
130                 fd <- cls_fds,
131                 let (xs,ys) = instFD fd cls_tvs tys
132               ]
133 \end{code}
134
135     
136 %************************************************************************
137 %*                                                                      *
138 \subsection{Generate equations from functional dependencies}
139 %*                                                                      *
140 %************************************************************************
141
142
143 \begin{code}
144 type Equation = (TyVarSet, [(Type, Type)])
145 -- These pairs of types should be equal, for some
146 -- substitution of the tyvars in the tyvar set
147 -- INVARIANT: corresponding types aren't already equal
148
149 -- It's important that we have a *list* of pairs of types.  Consider
150 --      class C a b c | a -> b c where ...
151 --      instance C Int x x where ...
152 -- Then, given the constraint (C Int Bool v) we should improve v to Bool,
153 -- via the equation ({x}, [(Bool,x), (v,x)])
154 -- This would not happen if the class had looked like
155 --      class C a b c | a -> b, a -> c
156
157 -- To "execute" the equation, make fresh type variable for each tyvar in the set,
158 -- instantiate the two types with these fresh variables, and then unify.
159 --
160 -- For example, ({a,b}, (a,Int,b), (Int,z,Bool))
161 -- We unify z with Int, but since a and b are quantified we do nothing to them
162 -- We usually act on an equation by instantiating the quantified type varaibles
163 -- to fresh type variables, and then calling the standard unifier.
164
165 pprEquation :: Equation -> SDoc
166 pprEquation (qtvs, pairs) 
167   = vcat [ptext (sLit "forall") <+> braces (pprWithCommas ppr (varSetElems qtvs)),
168           nest 2 (vcat [ ppr t1 <+> ptext (sLit "~") <+> ppr t2 | (t1,t2) <- pairs])]
169 \end{code}
170
171 Given a bunch of predicates that must hold, such as
172
173         C Int t1, C Int t2, C Bool t3, ?x::t4, ?x::t5
174
175 improve figures out what extra equations must hold.
176 For example, if we have
177
178         class C a b | a->b where ...
179
180 then improve will return
181
182         [(t1,t2), (t4,t5)]
183
184 NOTA BENE:
185
186   * improve does not iterate.  It's possible that when we make
187     t1=t2, for example, that will in turn trigger a new equation.
188     This would happen if we also had
189         C t1 t7, C t2 t8
190     If t1=t2, we also get t7=t8.
191
192     improve does *not* do this extra step.  It relies on the caller
193     doing so.
194
195   * The equations unify types that are not already equal.  So there
196     is no effect iff the result of improve is empty
197
198
199
200 \begin{code}
201 type Pred_Loc = (PredType, SDoc)        -- SDoc says where the Pred comes from
202
203 improveFromInstEnv :: (Class -> [Instance]) 
204                      -> Pred_Loc 
205                      -> [(Equation,Pred_Loc,Pred_Loc)]
206 -- Improvement from top-level instances 
207 improveFromInstEnv _inst_env pred 
208   = improveOne _inst_env pred []        -- TODO: Refactor to directly use instance_eqnd? 
209
210 improveFromAnother :: Pred_Loc 
211                    -> Pred_Loc
212                    -> [(Equation,Pred_Loc,Pred_Loc)] 
213 -- Improvement from another local (given or wanted) constraint
214 improveFromAnother pred1 pred2 
215   = improveOne (\_ -> []) pred1 [pred2] -- TODO: Refactor to directly use pairwise_eqns?
216
217
218 improveOne :: (Class -> [Instance])             -- Gives instances for given class
219            -> Pred_Loc                          -- Do improvement triggered by this
220            -> [Pred_Loc]                        -- Current constraints 
221            -> [(Equation,Pred_Loc,Pred_Loc)]    -- Derived equalities that must also hold
222                                                 -- (NB the above INVARIANT for type Equation)
223                                                 -- The Pred_Locs explain which two predicates were
224                                                 -- combined (for error messages)
225 -- Just do improvement triggered by a single, distinguised predicate
226
227 improveOne _inst_env pred@(IParam ip ty, _) preds
228   = [ ((emptyVarSet, [(ty,ty2)]), pred, p2) 
229     | p2@(IParam ip2 ty2, _) <- preds
230     , ip==ip2
231     , not (ty `tcEqType` ty2)]
232
233 improveOne inst_env pred@(ClassP cls tys, _) preds
234   | tys `lengthAtLeast` 2
235   = instance_eqns ++ pairwise_eqns
236         -- NB: we put the instance equations first.   This biases the 
237         -- order so that we first improve individual constraints against the
238         -- instances (which are perhaps in a library and less likely to be
239         -- wrong; and THEN perform the pairwise checks.
240         -- The other way round, it's possible for the pairwise check to succeed
241         -- and cause a subsequent, misleading failure of one of the pair with an
242         -- instance declaration.  See tcfail143.hs for an example
243   where
244     (cls_tvs, cls_fds) = classTvsFds cls
245     instances          = inst_env cls
246     rough_tcs          = roughMatchTcs tys
247
248         -- NOTE that we iterate over the fds first; they are typically
249         -- empty, which aborts the rest of the loop.
250     pairwise_eqns :: [(Equation,Pred_Loc,Pred_Loc)]
251     pairwise_eqns       -- This group comes from pairwise comparison
252       = [ (eqn, pred, p2)
253         | fd <- cls_fds
254         , p2@(ClassP cls2 tys2, _) <- preds
255         , cls == cls2
256         , eqn <- checkClsFD emptyVarSet fd cls_tvs tys tys2
257         ]
258
259     instance_eqns :: [(Equation,Pred_Loc,Pred_Loc)]
260     instance_eqns       -- This group comes from comparing with instance decls
261       = [ (eqn, p_inst, pred)
262         | fd <- cls_fds         -- Iterate through the fundeps first, 
263                                 -- because there often are none!
264         , let trimmed_tcs = trimRoughMatchTcs cls_tvs fd rough_tcs
265                 -- Trim the rough_tcs based on the head of the fundep.
266                 -- Remember that instanceCantMatch treats both argumnents
267                 -- symmetrically, so it's ok to trim the rough_tcs,
268                 -- rather than trimming each inst_tcs in turn
269         , ispec@(Instance { is_tvs = qtvs, is_tys = tys_inst, 
270                             is_tcs = inst_tcs }) <- instances
271         , not (instanceCantMatch inst_tcs trimmed_tcs)
272         , eqn <- checkClsFD qtvs fd cls_tvs tys_inst tys
273         , let p_inst = (mkClassPred cls tys_inst, 
274                         sep [ ptext (sLit "arising from the dependency") <+> quotes (pprFunDep fd)
275                             , ptext (sLit "in the instance declaration at") 
276                                   <+> ppr (getSrcLoc ispec)])
277         ]
278
279 improveOne _ _ _
280   = []
281
282
283 checkClsFD :: TyVarSet                  -- Quantified type variables; see note below
284            -> FunDep TyVar -> [TyVar]   -- One functional dependency from the class
285            -> [Type] -> [Type]
286            -> [Equation]
287
288 checkClsFD qtvs fd clas_tvs tys1 tys2
289 -- 'qtvs' are the quantified type variables, the ones which an be instantiated 
290 -- to make the types match.  For example, given
291 --      class C a b | a->b where ...
292 --      instance C (Maybe x) (Tree x) where ..
293 --
294 -- and an Inst of form (C (Maybe t1) t2), 
295 -- then we will call checkClsFD with
296 --
297 --      qtvs = {x}, tys1 = [Maybe x,  Tree x]
298 --                  tys2 = [Maybe t1, t2]
299 --
300 -- We can instantiate x to t1, and then we want to force
301 --      (Tree x) [t1/x]  ~   t2
302 --
303 -- This function is also used when matching two Insts (rather than an Inst
304 -- against an instance decl. In that case, qtvs is empty, and we are doing
305 -- an equality check
306 -- 
307 -- This function is also used by InstEnv.badFunDeps, which needs to *unify*
308 -- For the one-sided matching case, the qtvs are just from the template,
309 -- so we get matching
310 --
311   = ASSERT2( length tys1 == length tys2     && 
312              length tys1 == length clas_tvs 
313             , ppr tys1 <+> ppr tys2 )
314
315     case tcUnifyTys bind_fn ls1 ls2 of
316         Nothing  -> []
317         Just subst | isJust (tcUnifyTys bind_fn rs1' rs2') 
318                         -- Don't include any equations that already hold. 
319                         -- Reason: then we know if any actual improvement has happened,
320                         --         in which case we need to iterate the solver
321                         -- In making this check we must taking account of the fact that any 
322                         -- qtvs that aren't already instantiated can be instantiated to anything 
323                         -- at all
324                   -> []
325
326                   | otherwise   -- Aha!  A useful equation
327                   -> [ (qtvs', zip rs1' rs2')]
328                         -- We could avoid this substTy stuff by producing the eqn
329                         -- (qtvs, ls1++rs1, ls2++rs2)
330                         -- which will re-do the ls1/ls2 unification when the equation is
331                         -- executed.  What we're doing instead is recording the partial
332                         -- work of the ls1/ls2 unification leaving a smaller unification problem
333                   where
334                     rs1'  = substTys subst rs1 
335                     rs2'  = substTys subst rs2
336                     qtvs' = filterVarSet (`notElemTvSubst` subst) qtvs
337                         -- qtvs' are the quantified type variables
338                         -- that have not been substituted out
339                         --      
340                         -- Eg.  class C a b | a -> b
341                         --      instance C Int [y]
342                         -- Given constraint C Int z
343                         -- we generate the equation
344                         --      ({y}, [y], z)
345   where
346     bind_fn tv | tv `elemVarSet` qtvs = BindMe
347                | otherwise            = Skolem
348
349     (ls1, rs1) = instFD fd clas_tvs tys1
350     (ls2, rs2) = instFD fd clas_tvs tys2
351
352 instFD :: FunDep TyVar -> [TyVar] -> [Type] -> FunDep Type
353 instFD (ls,rs) tvs tys
354   = (map lookup ls, map lookup rs)
355   where
356     env       = zipVarEnv tvs tys
357     lookup tv = lookupVarEnv_NF env tv
358 \end{code}
359
360 \begin{code}
361 checkInstCoverage :: Class -> [Type] -> Bool
362 -- Check that the Coverage Condition is obeyed in an instance decl
363 -- For example, if we have 
364 --      class theta => C a b | a -> b
365 --      instance C t1 t2 
366 -- Then we require fv(t2) `subset` fv(t1)
367 -- See Note [Coverage Condition] below
368
369 checkInstCoverage clas inst_taus
370   = all fundep_ok fds
371   where
372     (tyvars, fds) = classTvsFds clas
373     fundep_ok fd  = tyVarsOfTypes rs `subVarSet` tyVarsOfTypes ls
374                  where
375                    (ls,rs) = instFD fd tyvars inst_taus
376 \end{code}
377
378 Note [Coverage condition]
379 ~~~~~~~~~~~~~~~~~~~~~~~~~
380 For the coverage condition, we used to require only that 
381         fv(t2) `subset` oclose(fv(t1), theta)
382
383 Example:
384         class Mul a b c | a b -> c where
385                 (.*.) :: a -> b -> c
386
387         instance Mul Int Int Int where (.*.) = (*)
388         instance Mul Int Float Float where x .*. y = fromIntegral x * y
389         instance Mul a b c => Mul a [b] [c] where x .*. v = map (x.*.) v
390
391 In the third instance, it's not the case that fv([c]) `subset` fv(a,[b]).
392 But it is the case that fv([c]) `subset` oclose( theta, fv(a,[b]) )
393
394 But it is a mistake to accept the instance because then this defn:
395         f = \ b x y -> if b then x .*. [y] else y
396 makes instance inference go into a loop, because it requires the constraint
397         Mul a [b] b
398
399
400 %************************************************************************
401 %*                                                                      *
402         Check that a new instance decl is OK wrt fundeps
403 %*                                                                      *
404 %************************************************************************
405
406 Here is the bad case:
407         class C a b | a->b where ...
408         instance C Int Bool where ...
409         instance C Int Char where ...
410
411 The point is that a->b, so Int in the first parameter must uniquely
412 determine the second.  In general, given the same class decl, and given
413
414         instance C s1 s2 where ...
415         instance C t1 t2 where ...
416
417 Then the criterion is: if U=unify(s1,t1) then U(s2) = U(t2).
418
419 Matters are a little more complicated if there are free variables in
420 the s2/t2.  
421
422         class D a b c | a -> b
423         instance D a b => D [(a,a)] [b] Int
424         instance D a b => D [a]     [b] Bool
425
426 The instance decls don't overlap, because the third parameter keeps
427 them separate.  But we want to make sure that given any constraint
428         D s1 s2 s3
429 if s1 matches 
430
431
432 \begin{code}
433 checkFunDeps :: (InstEnv, InstEnv) -> Instance
434              -> Maybe [Instance]        -- Nothing  <=> ok
435                                         -- Just dfs <=> conflict with dfs
436 -- Check wheher adding DFunId would break functional-dependency constraints
437 -- Used only for instance decls defined in the module being compiled
438 checkFunDeps inst_envs ispec
439   | null bad_fundeps = Nothing
440   | otherwise        = Just bad_fundeps
441   where
442     (ins_tvs, _, clas, ins_tys) = instanceHead ispec
443     ins_tv_set   = mkVarSet ins_tvs
444     cls_inst_env = classInstances inst_envs clas
445     bad_fundeps  = badFunDeps cls_inst_env clas ins_tv_set ins_tys
446
447 badFunDeps :: [Instance] -> Class
448            -> TyVarSet -> [Type]        -- Proposed new instance type
449            -> [Instance]
450 badFunDeps cls_insts clas ins_tv_set ins_tys 
451   = nubBy eq_inst $
452     [ ispec | fd <- fds,        -- fds is often empty, so do this first!
453               let trimmed_tcs = trimRoughMatchTcs clas_tvs fd rough_tcs,
454               ispec@(Instance { is_tcs = inst_tcs, is_tvs = tvs, 
455                                 is_tys = tys }) <- cls_insts,
456                 -- Filter out ones that can't possibly match, 
457                 -- based on the head of the fundep
458               not (instanceCantMatch inst_tcs trimmed_tcs),     
459               notNull (checkClsFD (tvs `unionVarSet` ins_tv_set) 
460                                    fd clas_tvs tys ins_tys)
461     ]
462   where
463     (clas_tvs, fds) = classTvsFds clas
464     rough_tcs = roughMatchTcs ins_tys
465     eq_inst i1 i2 = instanceDFunId i1 == instanceDFunId i2
466         -- An single instance may appear twice in the un-nubbed conflict list
467         -- because it may conflict with more than one fundep.  E.g.
468         --      class C a b c | a -> b, a -> c
469         --      instance C Int Bool Bool
470         --      instance C Int Char Char
471         -- The second instance conflicts with the first by *both* fundeps
472
473 trimRoughMatchTcs :: [TyVar] -> FunDep TyVar -> [Maybe Name] -> [Maybe Name]
474 -- Computing rough_tcs for a particular fundep
475 --     class C a b c | a -> b where ...
476 -- For each instance .... => C ta tb tc
477 -- we want to match only on the type ta; so our
478 -- rough-match thing must similarly be filtered.  
479 -- Hence, we Nothing-ise the tb and tc types right here
480 trimRoughMatchTcs clas_tvs (ltvs, _) mb_tcs
481   = zipWith select clas_tvs mb_tcs
482   where
483     select clas_tv mb_tc | clas_tv `elem` ltvs = mb_tc
484                          | otherwise           = Nothing
485 \end{code}
486
487
488