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