Unique invariants: GHC invocation vs scope?

Hello, What are the intended invariants of Unique values? So far I thought that it is always gives a unique identity to things during a whole GHC invocation. However this is not true. I.e. eta expansion breaks this assumption. Here is a snippet from the STG IR of GHC.PrimopWrappers: extendInt8# [InlPrag=NOINLINE] :: Int8# -> Int# [GblId, Arity=1, Unf=OtherCon []] = \r [eta_B1] extendInt8# [eta_B1]; ord# [InlPrag=NOINLINE] :: Char# -> Int# [GblId, Arity=1, Unf=OtherCon []] = \r [eta_B1] ord# [eta_B1]; Where eta_B1 is redefined, so it is only unique in the scope. Is this intentional? Thanks, Csaba Hruska

Generally, there is no assumption that binders are unique, anywhere in GHC.
The Simplifier does remove gratuitious shadowing (like (\x. \x. e)), but there is really no guarantee at any stage.
Simon
From: ghc-devs
participants (2)
-
Csaba Hruska
-
Simon Peyton Jones