<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif;margin-left:40px">
Merging with my other question about shadowing problems with<br>
`toIface*`, in summary it seems that what I really should be doing, is<br>
compiling up to Tidy, taking the `CoreBinding`s from there and using<br>
`toIfaceBinding` on them to save the definitions. <br></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif">It's hard for me to be helpful here, because I don't know what invariants you want.  They might be:</div><div class="gmail_default" style="font-family:tahoma,sans-serif"><ul><li>ANF</li><li>Fully saturated primops</li><li>No shadowing of OccNames</li><li>Globally unique Uniques</li></ul><div>or some combination of these.  (Perhaps more -- read Note [CorePrep Overview]!)</div><div><br></div><div>If you can write down precisely what you want, you can probably achieve it, starting from either the output of Tidy or the output of Prep.</div><div><br></div><div>What is missing in GHC is a clear statement of the invariants on the output of Tidy, for which I opened #21333.  If you felt able to offer an MR for that, it'd be fantastic.</div><div><br></div><div>Simon<br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 2 Apr 2022 at 04:30, Gergő Érdi <<a href="mailto:gergo@erdi.hu" target="_blank">gergo@erdi.hu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I'm using Prep's output (mostly so that it's in ANF) in my full<br>
compilation pipeline, so ideally I would save Prep'd Core in my<br>
.hi-equivalents so that I don't have to rerun Prep on them every time<br>
I use them.<br>
<br>
I'll get back to you with some concrete examples of `OtherCon []` vs.<br>
meaningful unfoldings next week.<br>
<br>
Merging with my other question about shadowing problems with<br>
`toIface*`, in summary it seems that what I really should be doing, is<br>
compiling up to Tidy, taking the `CoreBinding`s from there and using<br>
`toIfaceBinding` on them to save the definitions.<br>
<br>
On Sat, Apr 2, 2022 at 12:53 AM Simon Peyton Jones<br>
<<a href="mailto:simon.peytonjones@gmail.com" target="_blank">simon.peytonjones@gmail.com</a>> wrote:<br>
><br>
> I don't think any top-level Ids should have OtherCon [] unfoldings?  If they do, can you give a repro case?  OtherCon [] unfoldings usually mean "I know this variable is evaluated, but I don't know what its value is.  E.g<br>
>    data T = MkT !a !a<br>
>   f (MkT x y) = ...<br>
><br>
> here x and y have OtherCon [] unfoldings. They are definitely not bottom!<br>
><br>
> You may want stronger invariants on the output of CorePrep than we have hitherto sought.  Can you explain what they are?  And why you want the output of CorePrep not CoreTidy?<br>
><br>
> Thanks<br>
><br>
> Simon<br>
><br>
> On Fri, 1 Apr 2022 at 09:13, ÉRDI Gergő <<a href="mailto:gergo@erdi.hu" target="_blank">gergo@erdi.hu</a>> wrote:<br>
>><br>
>> Hi,<br>
>><br>
>> I'm CC-ing the Clash mailing list because I believe they should have<br>
>> encountered the same problem (and perhaps have found a solution to it<br>
>> already!).<br>
>><br>
>> I'm trying to use `.hi` files compiled with `ExposeAllUnfoldings` set to<br>
>> reconstruct full Core bindings for further processing. By and large, this<br>
>> works, but I get tripped up on identifiers whose unfolding is only given<br>
>> as `OtherCon []`. It is unclear to me what is causing this -- some of them<br>
>> are recursive bindings while others are not.<br>
>><br>
>> The problem, of course, is that if all I know about an identifier is that<br>
>> it is `OtherCon []`, that doesn't allow me to restore its definition. So<br>
>> is there a way to tell GHC to put "full" unfoldings everywhere in<br>
>> `ExposeAllUnfoldings` mode?<br>
>><br>
>> Thanks,<br>
>>         Gergo<br>
>> _______________________________________________<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-bin/mailman/listinfo/ghc-devs</a><br>
><br>
> _______________________________________________<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-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div>