diff options
author | simonpj@microsoft.com <unknown> | 2008-10-31 14:02:36 +0000 |
---|---|---|
committer | simonpj@microsoft.com <unknown> | 2008-10-31 14:02:36 +0000 |
commit | 2dce32ca5188120ca220a36139ff216b852b389e (patch) | |
tree | 4b31c8e7f1e9d161aff0e8e297bd9cc393a89dd3 /compiler/deSugar | |
parent | 4abece290a5790cae1b1d994477af8166ca23e7a (diff) | |
download | haskell-2dce32ca5188120ca220a36139ff216b852b389e.tar.gz |
Comments only
Diffstat (limited to 'compiler/deSugar')
-rw-r--r-- | compiler/deSugar/DsBinds.lhs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/deSugar/DsBinds.lhs b/compiler/deSugar/DsBinds.lhs index 020b7b4fa3..4c144b8e50 100644 --- a/compiler/deSugar/DsBinds.lhs +++ b/compiler/deSugar/DsBinds.lhs @@ -163,14 +163,16 @@ dsHsBind auto_scc rest (AbsBinds [] [] exports binds) where B is the *non-recursive* binding fl = fg a b gl = gg b - h = h a b + h = h a b -- See (b); note shadowing! Notice (a) g has a different number of type variables to f, so we must use the mkArbitraryType thing to fill in the gaps. We use a type-let to do that. (b) The local variable h isn't in the exports, and rather than - clone a fresh copy we simply replace h by (h a b). + clone a fresh copy we simply replace h by (h a b), where + the two h's have different types! Shadowing happens here, + which looks confusing but works fine. (c) The result is *still* quadratic-sized if there are a lot of small bindings. So if there are more than some small |