<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Below are the minutes from last week’s in-person meeting at ICFP among the attending members of the Haskell Prime committee. The conversation moved swiftly, and I’ve done my best at capturing the essence of attendees’ comments. The attendees have had a week to consider these notes with no suggestions submitted; I thus consider these notes ratified.</div><div class=""><br class=""></div><div class="">Richard</div><div class=""><br class=""></div>----------<br class=""><div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Sep 19, 2016, 12:43pm JST, call to order.</div><div class=""><br class=""></div><div class="">Present:</div><div class="">José Trilla, Iavor Diatchki, Wren Romano, Richard Eisenberg, Simon Peyton Jones, Andres Löh, Nicolas Wu, Lennart Augustsson</div><div class=""><br class=""></div><div class=""><div class="">Convener: José</div></div><div class="">Notetaker: Richard</div><div class=""><br class=""></div><div class="">José: Let's talk about one issue and figure that one issue out. Need to maintain / start momentum.</div><div class="">José and Iavor wrote notes about possible topics to discuss.</div><div class=""><br class=""></div><div class="">Iavor: How do we get the process going?</div><div class="">Want to discuss: What's in scope?</div><div class="">What's the process for proposal? Do we need an implementation first? But that's a lot of</div><div class="">(potentially wasted) work.</div><div class=""><br class=""></div><div class="">Wren: We should coordinate before starting on a project to avoid duplicate effort.</div><div class=""><br class=""></div><div class="">Simon: But that's not our problem. We need *more* people working on things.</div><div class=""><br class=""></div><div class="">Simon: There's so much that's implemented but not formalized that we shouldn't worry about</div><div class="">things that aren't implemented.</div><div class=""><br class=""></div><div class="">Iavor: Not much that's uncontroversial.</div><div class=""><br class=""></div><div class="">Iavor: Suggested uncontroversial things:</div><div class="">TupleSections</div><div class=""><br class=""></div><div class="">Lennart: I use TupleSections. Yes.</div><div class=""><br class=""></div><div class="">Simon: TupleSections is too easy. What about MPTC?</div><div class=""><br class=""></div><div class="">Wren: I'm mildly against TupleSections. Too easy to make type errors due to errant commas.</div><div class=""><br class=""></div><div class="">Andres: TupleSections conflict with trailing commas. Some people really like trailing commas.</div><div class="">Not overly eager for TupleSections. Prefer not to have all these syntactic special cases; favor</div><div class="">simplicity.</div><div class=""><br class=""></div><div class="">Iavor, Wren: They are perhaps too simple to test the process.</div><div class=""><br class=""></div><div class="">Nick: Finish the list. We'll be quiet.</div><div class=""><br class=""></div><div class="">Iavor: Second item:</div><div class="">RecordWildCards, RecordPuns. I like them. Some people don't.</div><div class=""><br class=""></div><div class="">Lennart: RecordPuns have been removed.</div><div class=""><br class=""></div><div class="">Simon: No. They're still there.</div><div class=""><br class=""></div><div class="">Lennart: No. I mean that they were in the standard but were removed. But now people want them back.</div><div class=""><br class=""></div><div class="">Lennart: RecordWildCards introduce bound names with no binding site.</div><div class=""><br class=""></div><div class="">Richard: I've been confused by this.</div><div class=""><br class=""></div><div class="">Iavor: If you don't like these features, you don't have to use them.</div><div class=""><br class=""></div><div class="">Simon: Haskell has always supported more than one way to do things.</div><div class="">Like ArgumentDo. Seems overblown, but many people want them.</div><div class=""><br class=""></div><div class="">Iavor: GADTSyntax.</div><div class=""><br class=""></div><div class="">All: Yes.</div><div class=""><br class=""></div><div class="">Iavor: Do we do records in GADT notation?</div><div class=""><br class=""></div><div class="">Simon: Yes.</div><div class=""><br class=""></div><div class="">Iavor: But the typing rules of record selectors is hard in GADTs.</div><div class=""><br class=""></div><div class="">Simon: Yes.</div><div class=""><br class=""></div><div class="">Richard: But that's not part of GADTSyntax.</div><div class=""><br class=""></div><div class="">Andres: Will this include existentials?</div><div class=""><br class=""></div><div class="">Richard: Existentials aren't much fun without the ability to pack instance dictionaries. And then we run into incoherence. I vote no.</div><div class=""><br class=""></div><div class="">Iavor: KindSignatures.</div><div class=""><br class=""></div><div class="">Lennart: Then we'll need a name for *.</div><div class=""><br class=""></div><div class="">Iavor: EqualityConstraints. They can be useful in a superclass constraint.</div><div class=""><br class=""></div><div class="">Simon: This is a sensible extension.</div><div class=""><br class=""></div><div class="">Richard: I think EqualityConstraints will be hard to specify.</div><div class=""><br class=""></div><div class="">Andres: Maybe if we've gotten to a lot of other things.</div><div class=""><br class=""></div><div class="">Lennart: We'll need to have an implementation EqualityConstraints and see if it works.</div><div class=""><br class=""></div><div class="">Iavor: MPTC.</div><div class=""><br class=""></div><div class="">Simon: We've had them for a long time.</div><div class=""><br class=""></div><div class="">Andres, Lennart: They're quite useful.</div><div class=""><br class=""></div><div class="">Iavor: FlexibleInstances & FlexibleContexts</div><div class=""><br class=""></div><div class="">Andres, Richard, Wren: These can have some weird coherence problems.</div><div class=""><br class=""></div><div class="">Simon: If you have (Eq [a] => ...) and there is a top-level instance, now you have</div><div class="">multiple ways potentially to solve a constraint.</div><div class=""><br class=""></div><div class="">Andres, Simon: It's a kind of OverlappingInstances thing.</div><div class=""><br class=""></div><div class="">Iavor: Strictly OverlappingInstances. We should have a keyword not a pragma.</div><div class="">Restricted only to instances that overlap ones in the same module.</div><div class=""><br class=""></div><div class="">Lennart: It should be something like instance chains, really.</div><div class=""><br class=""></div><div class="">Iavor: GHC already orders overlapping instances.</div><div class=""><br class=""></div><div class="">Simon: Some people use an orphan instance in a library.</div><div class=""><br class=""></div><div class="">Iavor: That's generally wrong and hard to use correctly.</div><div class=""><br class=""></div><div class="">Andres: Hard to have guarantees of what will happen in practice.</div><div class=""><br class=""></div><div class="">Andres: Perhaps we should just have closed type classes.</div><div class=""><br class=""></div><div class="">Iavor: BangPatterns. On the argument. And only on variables.</div><div class=""><br class=""></div><div class="">Simon: It's nice on let bindings.</div><div class=""><br class=""></div><div class="">Iavor: But that should have a different notation.</div><div class=""><br class=""></div><div class="">Wren: The semantics are challenging on a where.</div><div class=""><br class=""></div><div class="">José: Yes. But on a let it's ok.</div><div class=""><br class=""></div><div class="">Simon: The Report has a description of pattern bindings in terms of rewriting to a simpler notation.</div><div class="">It's all quite simple.</div><div class=""><br class=""></div><div class="">Iavor: It's not how it works at the top level.</div><div class=""><br class=""></div><div class="">Lennart: A bang on a top-level binding could happen when the program starts to run.</div><div class=""><br class=""></div><div class="">Simon: Plausible.</div><div class=""><br class=""></div><div class="">José: Bangs in datatype declarations leads to a `seq` only when the datatype is fully saturated.</div><div class=""><br class=""></div><div class="">Simon: That's odd.</div><div class=""><br class=""></div><div class="">José: The current story is less performant that it could be.</div><div class=""><br class=""></div><div class="">Simon: It might be hard to implement. You'll have to allocate a closure for each argument.</div><div class=""><br class=""></div><div class="">Richard: Strict let is an abomination. cf. github post.</div><div class=""><br class=""></div><div class="">Iavor: Yes. That's why I wanted only one part of BangPatterns.</div><div class=""><br class=""></div><div class="">Simon: The question is: What's interesting enough for people to actually do the work?</div><div class=""><br class=""></div><div class="">Iavor: I'll do records.</div><div class=""><br class=""></div><div class="">Richard: Once something is ruled uncontroversial, someone just has to volunteer.</div><div class=""><br class=""></div><div class="">Andres: I've been unwilling to put in work not knowing about procedures, etc. E.g. Should every language extension</div><div class="">be handled separately? What's the procedure.</div><div class=""><br class=""></div><div class="">Simon: You mean: What are the steps I have to take?</div><div class=""><br class=""></div><div class="">Wren: It's a fear of bureaucracy that's stopping you.</div><div class=""><br class=""></div><div class="">Andres: But what really is a detailed-enough spec? The Report as is might not be enough.</div><div class=""><br class=""></div><div class="">Lennart: But we're not going to rewrite the report.</div><div class=""><br class=""></div><div class="">All: Agreed.</div><div class=""><br class=""></div><div class="">Lennart: We're making a diff.</div><div class=""><br class=""></div><div class="">Iavor: That's why we want to start with something simple.</div><div class=""><br class=""></div><div class="">Simon: Let's start with a free-standing specification. Then people can comment on the feature. Then,</div><div class="">integrate with the Report. Just having a diff would be a challenge for discussion.</div><div class=""><br class=""></div><div class="">Andres: Too many things interact if we just look at diffs.</div><div class=""><br class=""></div><div class="">Simon: Free-standing spec can have more exposition.</div><div class=""><br class=""></div><div class="">Simon: Shall we do TupleSections?</div><div class=""><br class=""></div><div class="">Andres: Is there any argument about how they should work?</div><div class=""><br class=""></div><div class="">Wren: Do we need the parens around tuples, or are the commas sufficient?</div><div class=""><br class=""></div><div class="">Many: We need the parens.</div><div class=""><br class=""></div><div class="">Wren: I like them too.</div><div class=""><br class=""></div><div class="">Simon: We still need a mechanism.</div><div class=""><br class=""></div><div class="">Andres: Herbert wanted to use the GHC proposal process.</div><div class=""><br class=""></div><div class="">( discussion of mechanics -- generally trying to clarify GHC proposal process )</div><div class="">Resolved: We will all *watch* the H2020 repo.</div><div class="">Resolved:</div><div class=""> - Start proposal on a branch.</div><div class=""> - Submit a PR from the branch to master.</div><div class=""> - Any of us can edit the branch.</div><div class=""> - We will do so in good faith.</div><div class=""> - If a substantive change needs being made, then make a PR against the PR.</div><div class=""><br class=""></div><div class="">Iavor: We need to actually finish something before moving on.</div><div class=""><br class=""></div><div class="">All: Yes. Finish.</div><div class=""><br class=""></div><div class="">Andres: Changing the report is an independent phase from the proposal process.</div><div class=""><br class=""></div><div class="">Wren: Yes.</div><div class=""><br class=""></div><div class="">Andres: But it's not a PR.</div><div class=""><br class=""></div><div class="">Richard: Do we have the source for H2010?</div><div class=""><br class=""></div><div class="">All: Yes. Herbert may have put it in.</div><div class=""><br class=""></div><div class="">Simon: Can we have very clear github instructions?</div><div class=""><br class=""></div><div class="">Iavor: Yes. I volunteer.</div><div class=""><br class=""></div><div class="">José: Jurriaan wants to say: We need to remember that Haskell is an education language.</div><div class=""><br class=""></div><div class="">José: I volunteer for TupleSections.</div><div class=""><br class=""></div><div class="">Richard: I volunteer for GADTSyntax.</div><div class=""><br class=""></div><div class="">Andres: I volunteer for ExistentialQuantification.</div><div class=""><br class=""></div><div class="">Adjourn 1:36pm JST.</div><div class=""><br class=""></div><div class="">
<div class="">-=-=-=-=-=-=-=-=-=-=-<br class="">Richard A. Eisenberg<br class="">Asst. Prof. of Computer Science<br class="">Bryn Mawr College<br class="">Bryn Mawr, PA, USA<br class=""><a href="http://cs.brynmawr.edu/~rae" class="">cs.brynmawr.edu/~rae</a></div>

</div>
<br class=""></div></div><br class=""></body></html>