Unique invariants: GHC invocation vs scope?

Simon Peyton Jones simonpj at microsoft.com
Fri May 8 21:07:59 UTC 2020

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.


From: ghc-devs <ghc-devs-bounces at haskell.org> On Behalf Of Csaba Hruska
Sent: 08 May 2020 14:03
To: GHC developers <ghc-devs at haskell.org>
Subject: Unique invariants: GHC invocation vs scope?


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?

Csaba Hruska
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20200508/4abd7afd/attachment.html>

More information about the ghc-devs mailing list