[ghc-steering-committee] #425: invisible binders in type declarations; rec: accept

Joachim Breitner mail at joachim-breitner.de
Sat Mar 26 15:10:22 UTC 2022


Hi,

sounds good to me, thanks for the good summary.

Cheers,
Joachim

Am Donnerstag, dem 24.03.2022 um 18:47 +0000 schrieb Richard Eisenberg:
> Hi committee,
> 
> I re-recommend acceptance for this proposal.
> 
> The main payload of the proposal is to allow definitions like
> 
> > data Proxy @k (a :: k) = Proxy
> 
> instead of today's
> 
> > data Proxy (a :: k) = Proxy
> 
> which has no explicit binding site for k.
> 
> This new syntax solves a number of smallish syntax conundra, as very
> well outlined in the proposal.
> 
> Along with this primary change, there is some cleanup of (loosely)
> related syntax:
>  - a type synonym declaration is now required to mention all kind
> variables on its left-hand side (previously, you could introduce a
> kind variable only on the right in some circumstances)
>  - arity inference for type synonyms and families with trailing
> invisible quantifiers is simplified (you've never written such a
> thing, I'm sure -- and yet GHC currently has special handling for
> this bit of esoterica)
>  - a type family equation must now mention all kind variables on its
> left-hand side (just like the new rule for type synonyms)
>  - a type family equation must now determine instantiation of all
> kind variables via the left-hand side patterns (this vastly increases
> readability and avoids some confusing behavior)
> 
> The cleanups can all break existing code. And so I posted on
> Discourse seeking community feedback. The feedback did not suggest
> this breakage would cause wide harm. And thus this re-recommendation
> of acceptance.
> 
> Please let us know what you think. I will go on holiday after April
> 4, so I hope to accept this proposal then.
> 
> Thanks!
> Richard
> 
> 
> > On Oct 25, 2021, at 3:24 AM, Spiwack, Arnaud
> > <arnaud.spiwack at tweag.io> wrote:
> > 
> > My weak objections are no match for Simon's strong keenness :-) .
> > 
> > I should say that, egoistically, I'd also like 5,6,7 to happen. I
> > was only expressing concerns about the price.
> > 
> > On Fri, Oct 22, 2021 at 1:00 PM Simon Peyton Jones
> > <simonpj at microsoft.com> wrote:
> > > I’m in strong support.  This tidies up the design nicely.
> > >  
> > > I am particularly keen on 5,6,7; indeed I wrote a whole proposal
> > > about it, which Vlad has #included here
> > >  
> > > https://github.com/ghc-proposals/ghc-proposals/pull/386
> > >  
> > > Simon
> > >  
> > > PS: I am leaving Microsoft at the end of November 2021, at which
> > > pointsimonpj at microsoft.com will cease to work. 
> > > Usesimon.peytonjones at gmail.com instead.  (For now, it just
> > > forwards to simonpj at microsoft.com.)
> > >  
> > > From: ghc-steering-committee
> > > <ghc-steering-committee-bounces at haskell.org>On Behalf Of Spiwack,
> > > Arnaud
> > > Sent: 21 October 2021 08:03
> > > To: Richard Eisenberg <rae at richarde.dev>
> > > Cc: ghc-steering-committee <ghc-steering-committee at haskell.org>
> > > Subject: Re: [ghc-steering-committee] #425: invisible binders in
> > > type declarations; rec: accept
> > >  
> > > I'm generally in favour. But I'm not convinced that the secondary
> > > changes (points 4–7) are worth it. They are certainly better
> > > place than we are today, but are they worth breaking existing
> > > code for? Point 5–7 can probably be replaced by warnings. I don't
> > > know about 4.
> > >  
> > > On Tue, Oct 19, 2021 at 11:20 PM Richard Eisenberg
> > > <rae at richarde.dev> wrote:
> > > > Hi all,
> > > > 
> > > > I am the shepherd for proposal #425,
> > > > https://github.com/ghc-proposals/ghc-proposals/pull/425,
> > > > proposing to add invisible binders in type declarations.
> > > > 
> > > > The main payload of the proposal is to allow definitions like
> > > > 
> > > > > data Proxy @k (a :: k) = Proxy
> > > > 
> > > > instead of today's
> > > > 
> > > > > data Proxy (a :: k) = Proxy
> > > > 
> > > > which has no explicit binding site for k.
> > > > 
> > > > This new syntax solves a number of smallish syntax conundra, as
> > > > very well outlined in the proposal.
> > > > 
> > > > In addition, the proposal includes two small unrelated tweaks
> > > > to the syntax of type family instances; these are points (6)
> > > > and (7) in the proposal. Both changes will break some obscure
> > > > (but still realistic, knowing Haskell) programs, but both fixes
> > > > are backward compatible.
> > > > 
> > > > ---
> > > > 
> > > > I recommend acceptance. The proposal is motivated nicely (do
> > > > check out the examples) and solves a real problem. The new
> > > > syntax fits in with other similar features. The small cleanups
> > > > to existing syntax will lead to better error messages.
> > > > 
> > > > The one drawback, as I see it, is that this proposal includes
> > > > point (5), which is a breaking change to the way type synonyms
> > > > work. Right now, we can say
> > > > 
> > > > > type P = (Proxy :: k -> Type)
> > > > 
> > > > and GHC will infer P :: forall k. k -> Type. Under this
> > > > proposal, you would have to write
> > > > 
> > > > > type P @k = (Proxy :: k -> Type)
> > > > 
> > > > bringing k into scope explicitly. The fix is not backward
> > > > compatible, and so I think this proposal should come with a
> > > > migration strategy, where we warn about the former version for
> > > > some releases before banning it. (Continuing to support it is
> > > > possible, but it's very awkward to have a variable mentioned
> > > > only in a synonym's right-hand side.)
> > > > 
> > > > Sorry for the delay in producing this recommendation!
> > > > Richard
> > > > _______________________________________________
> > > > ghc-steering-committee mailing list
> > > > ghc-steering-committee at haskell.org
> > > > https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee
> 
> _______________________________________________
> ghc-steering-committee mailing list
> ghc-steering-committee at haskell.org
> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee

-- 
Joachim Breitner
  mail at joachim-breitner.de
  http://www.joachim-breitner.de/



More information about the ghc-steering-committee mailing list