[Template-haskell] Renaming in pretty printer

Chris Brown cmb21 at kent.ac.uk
Tue Mar 28 13:11:24 EST 2006


Andy,


> Template Haskell appears to be doing renaming during pretty printing.
> Take this example, that both prints the AST directly, as well as  
> pretty printing.
>
> *Main> runQ ([| let x = 1 in x |]) >>= \x -> print (pprint x,x)
> ("let x_0 = 1\n in x_0",LetE [ValD (VarP x_7) (NormalB (LitE  
> (IntegerL 1))) []] (VarE x_7))
>
> The var x has name x_7 in the AST, but x_0 in the pretty printed  
> version.
>
> Can someone comment on why this is done?
>

 From my knowledge its the way GHC handles identifiers. GHC's AST  
does not contain source location information, so there is no way to  
distinguish between different identifiers in an AST. GHC renames them  
so they are unique to avoid this ambiguity. If you take another  
Haskell compiler such as Programatica  - Programatica gets around  
using unique names for identifiers by adding location information as  
well, so you can can refer to a particular identifier by its source  
location.

Chris.



More information about the template-haskell mailing list