[project @ 2004-12-20 17:16:24 by simonpj]
authorsimonpj <unknown>
Mon, 20 Dec 2004 17:17:10 +0000 (17:17 +0000)
committersimonpj <unknown>
Mon, 20 Dec 2004 17:17:10 +0000 (17:17 +0000)
commitc45a0ac5fdc6a931c3bc1a45fd4967f54c2983ca
tree8f7401731c8f49fb339dfdfe8f6eb4c138eccb4c
parentf207c9b98f6ef58a76a0ddb030e1239e082055af
[project @ 2004-12-20 17:16:24 by simonpj]
--------------------------------
Deal properly with dual-renaming
--------------------------------

When comparing types and terms, and during matching, we are faced
with
\x.e1 ~   \y.e2

There are many pitfalls here, and GHC has never done the job properly.
Now, at last it does, using a new abstraction VarEnv.RnEnv2.  See
comments there for how it works.

There are lots of consequential changes to use the new stuff, especially
in
types/Type (type comparison),
types/Unify (matching on types)
coreSyn/CoreUtils (equality on expressions),
specialise/Rules (matching).

I'm not 100% certain of that I've covered all the bases, so let me
know if something unexpected happens after you update.  Maybe wait until
a nightly build has worked ok first!
17 files changed:
ghc/compiler/basicTypes/VarEnv.lhs
ghc/compiler/coreSyn/CoreLint.lhs
ghc/compiler/coreSyn/CoreUtils.lhs
ghc/compiler/coreSyn/Subst.lhs
ghc/compiler/deSugar/DsForeign.lhs
ghc/compiler/prelude/PrelRules.lhs
ghc/compiler/simplCore/Simplify.lhs
ghc/compiler/specialise/Rules.lhs
ghc/compiler/specialise/SpecConstr.lhs
ghc/compiler/stranal/DmdAnal.lhs
ghc/compiler/typecheck/TcBinds.lhs
ghc/compiler/typecheck/TcSimplify.lhs
ghc/compiler/typecheck/TcType.lhs
ghc/compiler/types/Type.lhs
ghc/compiler/types/Unify.lhs
ghc/compiler/utils/Maybes.lhs
ghc/compiler/utils/Util.lhs