<div dir="ltr"><div dir="ltr">On Mon, Apr 4, 2022 at 9:33 AM Simon Peyton Jones <<a href="mailto:simon.peytonjones@gmail.com">simon.peytonjones@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">So it's a bit like let-vs-where, or H98 data decls vs GADTs.  Do we even need a firm "recommendation"?<br></div></blockquote><div><br></div><div>I think that there are two aspects to consider here, which make me think that: yes, we probably want a stronger form of recommendation (even in the extensions-are-switches-to-tune-GHC's-behaviour worldview)<br></div><div>1. Let and where, as well as the two syntaxes for data types are perfectly compatible with one another. You can use both at the same time, and people do. While ExtendedForAllScope and TypeAbstractions are at odds with each other. Granted, the proposal gives a semantics to having both of them on. But still, they are not good friends. So you probably actually don't want to mix them. This point is highlighted by the fact that the proposal makes ExtendedForAllScope an extension with the explicit purpose of being able to deactivate this behaviour. Nobody ever asked to deactivate lets or the Haskell 98 syntax for data types.</div><div>2. As the proposal stands it's easier to use ExtendedForAllScope than to use TypeAbstraction. Because you will usually use it in conjunction with ScopedTypeVariables, and ScopedTypeVariables implies the former but not the latter. Therefore, ExtendedForAllScope requires turning a single extension while TypeAbstractions requires two. Therefore, from the point of view of the programmer, ExtendedForAllScope will feel like more of a default choice. If we think that TypeAbstractions ought to be the default choice, then we need to make it at least as easy as ExtendedForAllScope.</div><div><br></div><div>/Arnaud<br></div></div></div>