[ghc-steering-committee] #287: Simplify subsumption , recommendation: accept

Richard Eisenberg rae at richarde.dev
Fri Jan 17 14:35:40 UTC 2020


I'm in support of acceptance and the quick transition strategy. One more bit of rationale: if we didn't have these features and someone proposed them today, we'd shoot them down without much discussion, given the way these features invisibly change the semantics of programs.

Richard

> On Jan 17, 2020, at 2:16 PM, Eric Seidel <eric at seidel.io> wrote:
> 
> I support acceptance as well. Changing the semantics of the program as part of type-checking is just bizarre and it seems like the impact in terms of required code changes is quite limited.
> 
> Given how easy the fixes appear to be, and the fact that the fixed program will compile just fine with older GHCs, I'm inclined to support option (2): ripping the code out immediately. I've left a comment on the PR asking if we can do so while providing helpful fixit hints to unaware users.
> 
> On Fri, Jan 17, 2020, at 08:49, Spiwack, Arnaud wrote:
>> Dear all,
>> 
>> As the shepherd for proposal #287 [ 
>> https://github.com/ghc-proposals/ghc-proposals/pull/287 ], I recommend 
>> acceptance
>> 
>> Summary
>> 
>> 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).
>> 
>> 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).
>> 
>> Rationale
>> 
>> 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.
>> 
>> 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.
>> 
>> Remaining question
>> 
>> There is one open question on the pull request thread. Namely, how to 
>> schedule the removal. Two paths are being discussed
>> 1. 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
>> 2. Simply remove the code, preferably early in the release cycle, 
>> communicate profusely.
>> 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.
>> 
>> Best,
>> Arnaud
>> _______________________________________________
>> ghc-steering-committee mailing list
>> ghc-steering-committee at haskell.org <mailto:ghc-steering-committee at haskell.org>
>> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee <https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee>
>> 
> _______________________________________________
> ghc-steering-committee mailing list
> ghc-steering-committee at haskell.org <mailto:ghc-steering-committee at haskell.org>
> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee <https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-steering-committee/attachments/20200117/df8d2afc/attachment-0001.html>


More information about the ghc-steering-committee mailing list