From: simonpj@microsoft.com Date: Wed, 13 Aug 2008 08:28:28 +0000 (+0000) Subject: Improve docs for orphan decls (thanks Yitzchak Gale) X-Git-Tag: 2008-09-12~202 X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=e42d6cb48df657053029aff833de1151cf7349bf Improve docs for orphan decls (thanks Yitzchak Gale) --- diff --git a/docs/users_guide/separate_compilation.xml b/docs/users_guide/separate_compilation.xml index 1bdb0c5..bc3afca 100644 --- a/docs/users_guide/separate_compilation.xml +++ b/docs/users_guide/separate_compilation.xml @@ -1169,7 +1169,8 @@ just in case they contain an instance declaration that matters to M. This would be a disaster in practice, so GHC tries to be clever. In particular, if an instance declaration is in the same module as the definition -of any type or class mentioned in the head of the instance declaration, then +of any type or class mentioned in the head of the instance declaration +(the part after the “=>”; see ), then GHC has to visit that interface file anyway. Example: module A where @@ -1208,7 +1209,7 @@ functional dependency: class E x y | y -> x where ... Then in some importing module M, the constraint (E a Int) should be "improved" by setting -a = Int, even though there is no explicit mention +a = T, even though there is no explicit mention of T in M. These considerations lead to the following definition of an orphan module: @@ -1232,7 +1233,7 @@ These considerations lead to the following definition of an orphan module: - Only the instance head (the part after the “=>”) + Only the instance head counts. In the example above, it is not good enough for C's declaration to be in module A; it must be the declaration of D or T.