<div dir="auto">I am in support</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jan 17, 2020, 05:50 Spiwack, Arnaud <<a href="mailto:arnaud.spiwack@tweag.io">arnaud.spiwack@tweag.io</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Dear all,</div><div><br></div><div>As the shepherd for proposal #287 [ <a href="https://github.com/ghc-proposals/ghc-proposals/pull/287" target="_blank" rel="noreferrer">https://github.com/ghc-proposals/ghc-proposals/pull/287</a> ], I recommend acceptance</div><div><br></div><div>Summary</div><div><br></div><div style="margin-left:40px">The proposal is to remove a bunch of typing rules meant to make RankNTypes a bit more powerful (covariance and contravariance of the arrow constructor, as well as deep instantiation and deep skolemisation). The problem with these rules is that 1/ they complicate the type checker 2/ They are implemented by performing eta-expansion during elaboration, which changes the semantics of program 3/ Dropping (some of) them is beneficial for the quick-look story (proposal currently on hold).</div><div style="margin-left:40px"><br></div><div style="margin-left:40px">The authors have tried this change on all of Stackage, and could come up with simple fixes (~300 lines of which) for all but 2 packages (namely, singleton, because of template haskell stuff, and labels for reason not well identified).<br></div><div><br></div><div>Rationale</div><div><br></div><div style="margin-left:40px">The common point of all these features is that they jiggle the position of foralls around. Which sounds reasonable at first glance. But really, they tend to interact badly with other stuff (I don't remember the circumstances, but there was a discussion of deep instantiation and deep skolemisation in the context of linear types as well). Basically, they are rather fragile features, I'd rather we did without them.</div><div style="margin-left:40px"><br></div><div style="margin-left:40px">I think that 300 lines of simple fixes for all of Stackage is a very small number. So it is legitimate to consider this change to have low impact. Regarding the singleton, I'm sure Richard will be happy to fix it ;-) . Only labels remains. It shouldn't be a blocker.<br></div><div><br></div><div>Remaining question</div><div><br></div><div style="margin-left:40px">There is one open question on the pull request thread. Namely, how to schedule the removal. Two paths are being discussed</div><div style="margin-left:40px"><ol><li>Add a `-XLessSubsumption` flag, turn it off by default, then turn it on by default in version n+1, then remove the subsumption rules altogether in version n+3</li><li>Simply remove the code, preferably early in the release cycle, communicate profusely.</li></ol></div><div style="margin-left:40px"><div>The thread participants seem to lean towards (2). The reason being that this is a change where it is easy to write code compatible with previous versions of the compiler (everything which compiles after this change also compiles before this change). Also, there is a preference for removing the relevant code sooner rather than later. But I'd like the opinion of the committee.</div><div><br></div></div><div>Best,</div><div>Arnaud<br></div></div>
_______________________________________________<br>
ghc-steering-committee mailing list<br>
<a href="mailto:ghc-steering-committee@haskell.org" target="_blank" rel="noreferrer">ghc-steering-committee@haskell.org</a><br>
<a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" rel="noreferrer noreferrer" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><br>
</blockquote></div>