<div dir="ltr">OK, I attached an example for a specialization of Show for a special case of a custom type, like Ratio in <a href="https://hackage.haskell.org/package/base-4.9.1.0/docs/src/GHC.Real.html">GHC.Real</a>. My invokation with a custom GHC (8.0-based) was like this:<div><br></div><div> $ <ghc> Module.hs -ddump-simpl -O -fforce-recomp<br></div><div><br></div><div>At the begin of the log, I listed all exported top-level identifiers, the only interesting of which is `$fShowRatio :: Show a => Show (Ratio a)`, the default implementation. Note that at the bottom, there are RULEs stating the specialization for `Show Integer`, but that the specialized dictionary `$fShowRatio_$s$fShowRatio :: Show (Ratio Integer)` isn't otherwise reachable from any exported top-level identifier. Same goes for any of the specialized dictionary methods.</div><div><br></div><div>Now consider what happens if we request a `Show (Ratio Integer)` dictionary in another module: GHC finds the exported default dictionary `$fShowRatio :: Show a => Show (Ratio a)`, but then applies a specialization RULE that will effectively use the presumably absent `$fShowRatio_$s$fShowRatio :: Show (Ratio Integer)`.</div><div><br></div><div>In my case, my custom GHC would substitute away the `showString " % "` for an `absentError "lvl [Char]"` and crash in subtle ways. The only reason this isn't happening for GHC master is that DmdAnal does consider all top-level arguments to be used, instead of only the exported ones (which is what CallArity does).</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 28, 2017 at 11:53 PM, Sebastian Graf <span dir="ltr"><<a href="mailto:sgraf1337@gmail.com" target="_blank">sgraf1337@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">welcome on this list!</blockquote><div><br></div><div>Thanks :)</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> isExportedId :: Var -> Bool</blockquote><div><br></div><div>That's what I have been using so far, but I found that said RULE pragmas mentioned non-exported identifiers. Or maybe it was just some temporary build system mess-up, I'll work on a reproduction...</div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Sun, May 28, 2017 at 10:33 PM, Joachim Breitner <span dir="ltr"><<a href="mailto:mail@joachim-breitner.de" target="_blank">mail@joachim-breitner.de</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="h5">Hi Sebastian,<br>
<br>
welcome on this list!<br>
<span class="m_-8651003887547175895gmail-"><br>
Am Sonntag, den 28.05.2017, 17:52 +0200 schrieb Sebastian Graf:<br>
> Is there some function that tells me if an identifier is 'externally<br>
> visible' in that sense? I think <a href="https://downloads.haskell.org/~ghc/8" rel="noreferrer" target="_blank">https://downloads.haskel<wbr>l.org/~ghc/8</a>.<br>
> 0.1/docs/html/libraries/ghc-8.<wbr>0.1/GHC.html#v:isExternalName is what<br>
> I'm after, but I want to be sure. Does that function already work<br>
> when the Ids are still local?<br>
<br>
</span>I would expect<br>
<br>
isExportedId :: Var -> Bool<br>
<br>
to do precisely that.<br>
<br>
Greetings,<br>
Joachim<br>
<span class="m_-8651003887547175895gmail-HOEnZb"><font color="#888888"><br>
--<br>
Joachim “nomeata” Breitner<br>
<a href="mailto:mail@joachim-breitner.de" target="_blank">mail@joachim-breitner.de</a> • <a href="https://www.joachim-breitner.de/" rel="noreferrer" target="_blank">https://www.joachim-breitner.d<wbr>e/</a><br>
XMPP: <a href="mailto:nomeata@joachim-breitner.de" target="_blank">nomeata@joachim-breitner.de</a> • OpenPGP-Key: 0xF0FBF51F<br>
Debian Developer: <a href="mailto:nomeata@debian.org" target="_blank">nomeata@debian.org</a></font></span><br></div></div>______________________________<wbr>_________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/ghc-devs</a><br>
<br></blockquote></div><br></div></div>
</blockquote></div><br></div>