From: simonpj@microsoft.com Date: Sun, 19 Oct 2008 18:42:08 +0000 (+0000) Subject: Comments to explain strict overlap checking for type family instances X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;ds=sidebyside;h=a769050d7c133dac1fbe9c50c2e212243bdbf980;hp=7299e42cc5214458ba16034dbfbf58de55f7121b;p=ghc-hetmet.git Comments to explain strict overlap checking for type family instances --- diff --git a/compiler/typecheck/FamInst.lhs b/compiler/typecheck/FamInst.lhs index 89dffbf..67c526d 100644 --- a/compiler/typecheck/FamInst.lhs +++ b/compiler/typecheck/FamInst.lhs @@ -36,6 +36,16 @@ check whether the instances in the two modules are consistent, *unless* we can be certain that the instances of the two modules have already been checked for consistency during the compilation of modules that we import. +Why do we need to check? Consider + module X1 where module X2 where + data T1 data T2 + type instance F T1 b = Int type instance F a T2 = Char + f1 :: F T1 a -> Int f2 :: Char -> F a T2 + f1 x = x f2 x = x + +Now if we import both X1 and X2 we could make (f2 . f1) :: Int -> Char. +Notice that neither instance is an orphan. + How do we know which pairs of modules have already been checked? Any pair of modules where both modules occur in the `HscTypes.dep_finsts' set (of the `HscTypes.Dependencies') of one of our directly imported modules must have