Indeed the type checker does not actually clone identifiers.
ghc -c -ddump-rn -ddump-tc -dppr-debug Foo.hs
==================== Renamer ====================
nonrec {Foo.hs:3:1-8}
main:Foo.f{v r0}
main:Foo.f{v r0}
= {Foo.hs:3:5-8}
ghc-prim:GHC.Types.True{(w) d 6u}
<>
TYPE SIGNATURES
( main:Foo.f{v r0} [lid] :: ghc-prim:GHC.Types.Bool{(w) tc 3c} ) :: ghc-prim:GHC.Types.Bool{(w) tc 3c}
TYPE CONSTRUCTORS
COERCION AXIOMS
Dependent modules: []
Dependent packages: [base, ghc-prim, integer-gmp]
==================== Typechecker ====================
{Foo.hs:3:1-8}
AbsBinds
[]
[]
[( main:Foo.f{v r0}
[lid] :: ghc-prim:GHC.Types.Bool{(w) tc 3c} ) <=
( f{v a9H}
[lid] :: ghc-prim:GHC.Types.Bool{(w) tc 3c} )
<>]
( main:Foo.f{v r0} [lid] :: ghc-prim:GHC.Types.Bool{(w) tc 3c} )
:: ghc-prim:GHC.Types.Bool{(w) tc 3c}
[LclId]
{Foo.hs:3:1-8}
( f{v a9H} [lid] :: ghc-prim:GHC.Types.Bool{(w) tc 3c} )
:: ghc-prim:GHC.Types.Bool{(w) tc 3c}
[LclId]
( f{v a9H} [lid] :: ghc-prim:GHC.Types.Bool{(w) tc 3c} )
= {Foo.hs:3:5-8}
ghc-prim:GHC.Types.True{(w) v 6v}
<>
EvBinds{}
From: Edsko de Vries [mailto:edskodevries@gmail.com]
Sent: 27 March 2013 14:04
To: Simon Peyton-Jones
Cc: ghc-devs@haskell.org
Subject: Re: Stability of Uniques
So is there any way that I can see that an identifier in the renamed AST is really the same as an identifier in the typechecked AST?
On Wed, Mar 27, 2013 at 1:57 PM, Simon Peyton-Jones <simonpj@microsoft.com> wrote:
Yes, locally-bound uniques change all the time, to maintain scoping hygiene. But top-level things
from other modules have uniques that do not change.
simon
From:
ghc-devs-bounces@haskell.org [mailto:ghc-devs-bounces@haskell.org]
On Behalf Of Edsko de Vries
Sent: 26 March 2013 15:05
To: ghc-devs@haskell.org
Subject: Stability of Uniques
Hi all,
Consider the very simple test
module Test2 where
f = True
When walking the AST after renaming I see that f has unique 1912603236 and True has unique 905969694. However, when walking the typechecked AST f seems to have unique 1627390565
instead. Should I expect that the unique associated with identifiers changes between renaming and typechecking? Or is there something else that I'm missing?
Thanks!
Edsko