summaryrefslogtreecommitdiff
path: root/compiler/deSugar
diff options
context:
space:
mode:
authorsimonpj@microsoft.com <unknown>2008-10-31 14:02:36 +0000
committersimonpj@microsoft.com <unknown>2008-10-31 14:02:36 +0000
commit2dce32ca5188120ca220a36139ff216b852b389e (patch)
tree4b31c8e7f1e9d161aff0e8e297bd9cc393a89dd3 /compiler/deSugar
parent4abece290a5790cae1b1d994477af8166ca23e7a (diff)
downloadhaskell-2dce32ca5188120ca220a36139ff216b852b389e.tar.gz
Comments only
Diffstat (limited to 'compiler/deSugar')
-rw-r--r--compiler/deSugar/DsBinds.lhs6
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