[ghc-steering-committee] #370: Syntax for Modifiers, Recommendation: Acceptance

Richard Eisenberg rae at richarde.dev
Fri Dec 11 20:35:20 UTC 2020


Sorry -- I've lost track here a bit. What's the issue with the grammar?

I'm quite happy to label this experimental. The key aspect of the proposal is just to outline a way forward with adding syntax.

Richard

> On Dec 10, 2020, at 4:29 AM, Alejandro Serrano Mena <trupill at gmail.com> wrote:
> 
> Should we mark them as “accepted” with the following text?
> 
> The Committee accepts this proposal as experimental. This means that the Committee expects changes to this feature in the future, maybe as the result of other accepted proposals.
> 
> If you agree, then we can accept this proposal once a little remaining issue with the grammar has been clarified.
> 
> Regards,
> Alejandro
> 
> 
> On 10 Dec 2020 at 09:59:02, Simon Peyton Jones <simonpj at microsoft.com <mailto:simonpj at microsoft.com>> wrote:
> That was the point of my previous email: accept, and accept-as-experimental are actually one and the same.
> 
> Objectively, yes.  But I think it helps users to advertise a feature as experimental.  It’s a signal to users that this feature is, well, experimental.  It is more likely to change.
> 
> It’s only an indication not a clear distinction.  But I find it helpful.
> 
> For me, it also reflects how I evaluate the proposal.  For a change to a well-established feature, we have a lot of experience in how people use that feature. 
> 
> For experimental features we don’t.  Example: defaulting for matchability for unsaturated type families.  We don’t have unsaturated type families right now, so we don’t have any code that uses them, and hence zero in-the-wild experience about matchability defaulting.  We shouldn’t spend ages arguing the toss – just trust Csongor’s judgement and give it a try, but advertising that details may change.
> 
> Simon
> 
>  
> From: Spiwack, Arnaud <arnaud.spiwack at tweag.io <mailto:arnaud.spiwack at tweag.io>> 
> Sent: 10 December 2020 08:06
> To: Alejandro Serrano Mena <trupill at gmail.com <mailto:trupill at gmail.com>>
> Cc: Richard Eisenberg <rae at richarde.dev <mailto:rae at richarde.dev>>; ghc-steering-committee at haskell.org <mailto:ghc-steering-committee at haskell.org>; Simon Peyton Jones <simonpj at microsoft.com <mailto:simonpj at microsoft.com>>
> Subject: Re: [ghc-steering-committee] #370: Syntax for Modifiers, Recommendation: Acceptance
> 
>  
> That was the point of my previous email: accept, and accept-as-experimental are actually one and the same.
> 
>  
> What Simon is driving at, I think, is: depending on what the proposal is about, we want to apply more or less strict standard of acceptance (if a proposal is about fixing something in an existing feature, then we better be rather sure that it is indeed an improvement; but if it's about adding something new in an untrodden territory, then we can't really be sure, and it's worth experimenting with).
> 
>  
> On Wed, Dec 9, 2020 at 9:17 PM Alejandro Serrano Mena <trupill at gmail.com <mailto:trupill at gmail.com>> wrote:
> 
> Dear all,
> 
> As the shepherd of this proposal, I’m quite confused about what the outcome should be. The ghc-proposals README states that:
> 
>  
> Acceptance of the proposal implies that the implementation will be accepted into GHC provided it is well-engineered, well-documented, and does not complicate the code-base too much.
> 
>  
> Most of the Committee seems to lean towards “this seems OK right now, but we don’t want to be locked” or “mark this as experimental”. However, there’s no such notion as “accept as experimental”. Furthermore, as it stands the proposal gives some syntax, and then asks any new extensions to use that syntax; so it cannot be completely thought as a feature by itself.
> 
>  
> Regards,
> 
> Alejandro
> 
> On 9 Dec 2020 at 15:59:43, Spiwack, Arnaud <arnaud.spiwack at tweag.io <mailto:arnaud.spiwack at tweag.io>> wrote:
> 
> It's always possible to change. I don't think accepting a proposal means (or ought to mean) that we are locked into anything. Accepting a proposal means that we won't oppose a design-related argument to a PR that implements (part or all of) an accepted proposal.
> 
>  
> I don't know how to quantify the degree of confidence that we have in the stability of a proposal. Here we are all saying: this is better than anything so far, and we rather need something like this to be a thing, but it's really a shot in the dark. And this lack of confidence will be reflected in the manual description. But even if we are confident in the stability of a proposal, it may very well happen that it changes dramatically, even soon.
> 
>  
> On Wed, Dec 9, 2020 at 2:55 PM Simon Peyton Jones via ghc-steering-committee <ghc-steering-committee at haskell.org <mailto:ghc-steering-committee at haskell.org>> wrote:
> 
> I’ve replied on GitHub.  Generally in favour.  But mark it as experimental… I don’t want to be locked into “we decided on this in Dec 2020 so now it’s too late”.  WE can learn from experience.
> 
>  
> Simon
> 
>  
> From: ghc-steering-committee <ghc-steering-committee-bounces at haskell.org <mailto:ghc-steering-committee-bounces at haskell.org>> On Behalf Of Alejandro Serrano Mena
> Sent: 03 December 2020 20:17
> To: Richard Eisenberg <rae at richarde.dev <mailto:rae at richarde.dev>>
> Cc: ghc-steering-committee at haskell.org <mailto:ghc-steering-committee at haskell.org>
> Subject: Re: [ghc-steering-committee] #370: Syntax for Modifiers, Recommendation: Acceptance
> 
>  
> Dear Committee,
> 
>  
> Richard has requested for us to consider the new version of this proposal. As opposed to the previous version, this one is only about reserving syntax for “modifiers”, which at the beginning would be used for things like linearity or matchability of arrows.
> 
>  
> I think this is a good proposal, and one which would save us from re-considering syntax for every possible extension (and if linearity appears before the arrow and matchability after it, where would a future dimension go?). Thus I keep recommending acceptance on this new incarnation.
> 
>  
> Regards,
> 
> Alejandro
> 
>  
> On 30 Nov 2020 at 20:52:26, Richard Eisenberg <rae at richarde.dev <mailto:rae at richarde.dev>> wrote:
> 
> To my surprise, I found myself leaning against. So I updated and simplified the proposal to remove Modifier. This makes modifiers a bit more magical, but more likely to actually work in practice. The type inference story previously may have been intractable.
> 
>  
> I've requested that the committee consider the updates in parallel with community feedback.
> 
>  
> Thanks,
> 
> Richard
> 
>  
> On Nov 30, 2020, at 2:36 PM, Alejandro Serrano Mena <trupill at gmail.com <mailto:trupill at gmail.com>> wrote:
> 
>  
> After some discussion in the GitHub thread, changes are going to arrive to the proposal. I think the best is to send the proposal back to the “Needs revision” state.
> 
>  
> Regards,
> 
> Alejandro
> 
>  
> On 29 Nov 2020 at 23:12:44, Eric Seidel <eric at seidel.io <mailto:eric at seidel.io>> wrote:
> 
> I left a few comments and questions on the PR itself, but I'm leaning towards rejecting the proposal in its current form as well. This doesn't (yet) feel like a generic mechanism, in particular because the only modifier that has been specified would be deeply wired into GHC itself.
> 
> On Fri, Nov 27, 2020, at 04:46, Joachim Breitner wrote:
> 
> Hi,
> 
>  
> Am Donnerstag, den 26.11.2020, 14:58 -0500 schrieb Alejandro Serrano
> 
> Mena:
> 
> > Dear all,
> 
> > This proposal suggests adding syntax for a general notion of
> 
> > modifiers, like the ones we’ve been talking about lately affecting
> 
> > linearity or matchability of arrows. For example, if linear types and
> 
> > unsaturated families are accepted as they stand, we would have `Int
> 
> > #1 -> @U Bool` (or something like that), whereas with this proposal
> 
> > we would have the more uniform `Int %1 %Unmatchable -> Bool`.
> 
> >
> 
> > Since the amount of modifiers is likely to increase in the future, I
> 
> > think it’s a great idea to agree and reserve such syntax, instead of
> 
> > coming up with different ways on each proposal. I thus recommend
> 
> > acceptance of this proposal.
> 
> >
> 
> > The proposal itself:
> 
> > (1) introduces syntax for modifiers in types and defines how to
> 
> > type/kind check them,
> 
> > (2) reserved such syntax for other uses in declarations and terms.
> 
> >
> 
> > I think the proposal still has its merits only with (1), even though
> 
> > I lean towards accepting both parts of it.
> 
>  
> I like the idea of reserving syntax here, but parts of the proposal
> 
> smell a bit like premature generalization to me. Are we confident that
> 
> all annotations we eventually would like to use with this feature can
> 
> be expressed as types of a kind that is an instance of Modifier? Or
> 
> should we reserve the ability to have annotations that don't fit that
> 
> model?
> 
>  
> Would we ever have annotation that may affect phases earlier than than
> 
> typechecking? What if we want to use (%type e) and (%data e) to help
> 
> with the SingleNamepace issues? Look like useful annotations to me, but
> 
> I am not sure if they fit the framework proposed here.
> 
>  
> The fact that we special-case %1 supports that.
> 
>  
> The proposal explicitly has to state “No modifier polymorphism!”. But
> 
> isn't that indication that using the type system to model the various
> 
> modifiers might be the wrong tool?
> 
>  
> I wonder if there is a way where the %(…) on it’s own only reserve
> 
> syntax, and the various uses of that syntax can be disambiguated
> 
> _statically_ based on the content of ….
> 
>  
> Not great syntax, because not concise, enough, but morally I’d feel
> 
> more at ease with
> 
>  
>   Int %(multiplicity Many) -> Int
> 
>   Int %(multiplicity 1) -> Int
> 
>   Int %(multiplicity m) -> Int
> 
>  
> where multiplicity is a modifier keyword, to express the existing
> 
> features (including implicit generalization of m). Then we can extend
> 
> this to
> 
>  
>   Int %oneShot -> Int
> 
>  
> and
> 
>  
>   Int %(matchability M) -> Int
> 
>  
> and maybe even
> 
>  
>   foo (%type [a]) -- where foo :: forall a -> ()
> 
>  
> which is a modifier that
> 
>  
>  
> So at the moment, I am inclined to reject this proposal, until I am
> 
> convinced that we are not painting ourselves into a “all modifiers are
> 
> types of special kinds and that’s all the syntax and behaviour we ever
> 
> need” corner.
> 
>  
> Minor detail: If we can annotate infix use of the (->) “type operator”,
> 
> should we also be able to annotate other infix operators, i.e.
> 
>  
>   constr ::= (btype | ! atype) {modifier} conop (btype | ! atype)
> 
>   infixexp ::= lexp {modifier} qop infixexp
> 
>  
>  
>  
> Cheers,
> 
> Joachim
> 
>  
>  
> --
> 
> Joachim Breitner
> 
>   mail at joachim-breitner.de <mailto:mail at joachim-breitner.de>
>   http://www.joachim-breitner.de/ <https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.joachim-breitner.de%2F&data=04%7C01%7Csimonpj%40microsoft.com%7C97291bd458234e28f0aa08d89ce27f4f%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637431843904133795%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=EOafNT2JtRWPODqAKfG3TNH3xqPEe3%2B5ThuYLbjYPiY%3D&reserved=0>
>  
>  
> _______________________________________________
> 
> 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://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-committee&data=04%7C01%7Csimonpj%40microsoft.com%7C97291bd458234e28f0aa08d89ce27f4f%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637431843904143751%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=CSx3i0ZoLHVnh6rfNzv1qcJwMCXnRxM6iD%2FxYBRTJP8%3D&reserved=0>
>  
> _______________________________________________
> 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://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-committee&data=04%7C01%7Csimonpj%40microsoft.com%7C97291bd458234e28f0aa08d89ce27f4f%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637431843904143751%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=CSx3i0ZoLHVnh6rfNzv1qcJwMCXnRxM6iD%2FxYBRTJP8%3D&reserved=0>
> _______________________________________________
> 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://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-committee&data=04%7C01%7Csimonpj%40microsoft.com%7C97291bd458234e28f0aa08d89ce27f4f%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637431843904153698%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=EEoElFpNjneP9rKR808eGaYKwaV66tLHiN0Tbra0GkA%3D&reserved=0>
>  
> _______________________________________________
> 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://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-committee&data=04%7C01%7Csimonpj%40microsoft.com%7C97291bd458234e28f0aa08d89ce27f4f%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637431843904153698%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=EEoElFpNjneP9rKR808eGaYKwaV66tLHiN0Tbra0GkA%3D&reserved=0>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-steering-committee/attachments/20201211/a846d398/attachment-0001.html>


More information about the ghc-steering-committee mailing list