<div dir="ltr"><div>My votes:</div><div><br></div><div>## Uncontroversial extensions<br><br>I've been writing code with most of these enabled by default for quite<br>some time now. It saves a lot of LANGUAGE pragmas. Other than<br>RecordWildCards I doubt any of these are controversial.<br><br>BangPatterns: yes<br>BinaryLiterals: yes<br>DataKinds: yes<br>DeriveDataTypeable: yes<br>DeriveGeneric: yes<br>EmptyCase: yes<br>ExistentialQuantification: yes<br>FlexibleContexts: yes<br>FlexibleInstances: yes<br>GADTs: yes<br>GeneralisedNewtypeDeriving: yes<br>LambdaCase: yes<br>MultiParamTypeClasses: yes<br>MultiWayIf: yes<br>NoMonomorphismRestriction: yes<br>OverloadedStrings: yes<br>PatternSynonyms: yes<br>RankNTypes: yes<br>RecordWildCards: yes<br>ScopedTypeVariables: yes<br>StandaloneDeriving: yes<br>TupleSections: yes<br>TypeFamilies: yes<br>TypeSynonymInstances: yes<br>NondecreasingIndentation: yes<br>ConstrainedClassMethods: yes<br>ConstraintKinds: yes<br>DefaultSignatures: yes<br>DeriveFoldable: yes<br>DeriveFunctor: yes<br>DeriveTraversable: yes<br>DeriveAnyClass: yes<br>EmptyDataDecls: yes<br>EmptyDataDeriving: yes<br>HexFloatLiterals: yes<br>ImportQualifiedPost: yes<br>InstanceSigs: yes<br>KindSignatures: yes<br>LiberalTypeSynonyms: yes<br>NamedFieldPuns: yes<br>  (I don't personally like this, but I can't justify having<br>  RecordWildcards but not having this)<br>NegativeLiterals: yes<br>NumDecimals: yes<br>PolyKinds: yes<br>PostfixOperators: yes<br>UnicodeSyntax: yes<br><br>## Extensions that are implied by others, or are irrelevant:<br><br>GADTSyntax: yes<br>ExplicitForAll: yes<br>MonadFailDesugaring: irrelevant<br>MonoLocalBinds: yes<br><br>## Extensions that are deprecated or exist for legacy reasons:<br><br>DatatypeContexts: no<br>NPlusKPatterns: no<br>CUSKs: no<br>NoPatternGuards: no<br>ForeignFunctionInterface: yes<br>  (already implied by Haskell2010, why do we have this but<br>  NoPatternGuards?)<br>NullaryTypeClasses: no<br>OverlappingInstances: no<br>IncoherentInstances: no<br>TypeInType: no<br><br>## No to extensions that are too new to include in GHC2021:<br><br>QualifiedDo: no<br>LinearTypes: no<br>BlockArguments: no<br>LexicalNegation: no<br>QuantifiedConstraints: no<br>StandaloneKindSignatures: no<br>StarIsType: no<br><br>## No to extensions that are opt-in by design:<br><br>ApplicativeDo: no<br>  (can lead to non-deterministic behaviour with non-rule-abiding<br>  Applicative instances)<br>PackageImports: no<br>CPP: no<br>DeriveLift: no<br>  (only makes sense with TemplateHaskell, which is opt-in)<br>TemplateHaskell: no<br>TemplateHaskellQuotes: no<br>QuasiQuotes: no<br>RebindableSyntax: no<br>Safe: no<br>Strict: no<br>StrictData: no<br>Trustworthy: no<br>Unsafe: no<br>ExtendedDefaultRules: no<br>NoImplicitPrelude: no<br><br>## No to unsafe extensions:<br><br>UndecidableInstances: no<br>UndecidableSuperClasses: no<br><br>## No to low-level extensions, not intended to be on by default:<br><br>UnboxedTuples: no<br>UnboxedSums: no<br>MagicHash: no<br>UnliftedFFITypes: no<br>UnliftedNewtypes: no<br>GHCForeignImportPrim: no<br>InterruptibleFFI: no<br><br>## No to record-related extensions<br><br>Records are in flux, let's not do any of this in GHC2021.<br><br>DisambiguateRecordFields: no<br>DuplicateRecordFields: no<br>NoTraditionalRecordSyntax: no<br>OverloadedLabels: no<br><br>## The rest<br><br>That leaves some tricky ones, I'm putting all these as "no" or<br>"maybe"; we could conservatively just say "no" to all of them.<br><br>I'm voting NO on these:<br><br>Arrows: no<br>  (not widely used)<br>ImplicitParams: no<br>  (not widely used; questionable semantics; functionality available<br>  with reflection package)<br>ImpredicativeTypes: no<br>  (I don't think we want this on by default, right?)<br>ParallelListComp: no<br>  (not widely used, most uses are covered by zip)<br>StaticPointers: no<br>  (quite a niche extension, only really useful with Distributed Haskell)<br>TransformListComp: no<br>  (not widely used)<br>ViewPatterns: no<br>  (not widely used, and in my opinion not a good design)<br><br>I'm undecided on these:<br><br>AllowAmbiguousTypes: maybe<br>TypeApplications: maybe<br>CApiFFI: maybe<br>  (harmless, but a bit niche)<br>DerivingVia: maybe<br>  (not very widely-used, quite new)<br>DerivingStrategies: maybe<br>  (not very widely-used, quite new)<br>FunctionalDependencies: maybe<br>  (slightly inclined to "no", given the overlap<br>  with TypeFamilies and the lack of widespread usage)<br>ExplicitNamespaces: maybe<br>  (might change, so defer?)<br>MonadComprehensions: maybe<br>  (does this make error messages worse?)<br>PartialTypeSignatures: maybe<br>NamedWildCards: maybe<br>NumericUnderscores: maybe<br>OverloadedLists: maybe<br>  (impact on error messages?)<br>RecursiveDo: maybe<br>  (but introduced by a keyword so relatively harmless)<br>RoleAnnotations: maybe<br>  (not widely used, but when you need it you need it)<br>TypeFamilyDependencies: maybe<br>  (not widely used, but when you need it you need it)<br>TypeOperators: maybe</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 24 Nov 2020 at 09:34, Joachim Breitner <<a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear Committee,<br>
<br>
the requested data (hackage and survey) is in, has been aggregated,<br>
cooked, seasoned and is ready for consumption. 116 extensions are<br>
waiting on your assessment, so time to vote!<br>
<br>
## Procedure<br>
<br>
Please vote by email to this list, in a response to this thread.<br>
<br>
I want to make tallying easy and automatic, and my code will consider<br>
an extension Foo voted for if you write "Foo: yes" on its own line.<br>
This means you can include rationales, write "Foo: maybe" and "Foo: no"<br>
to remind yourself and others that about where you are, and you can<br>
safely quote other’s mails. For example, if you write:<br>
<br>
---- begin<br>
example ----<br>
<br>
Easy ones:<br>
<br>
DeriveFooBar: yes<br>
OverloadedBen: no<br>
<br>
These ones are tricky:<br>
<br>
ImplicitExceptions: yes<br>
  I know nobody likes that one, but I do.<br>
<br>
RandomEvaluationOrder: maybe<br>
  Not sure about this one, here is why…<br>
<br>
<br>
> Richard wrote:<br>
> DependentHaskell: yes<br>
> Rationale: See my thesis<br>
<br>
I’m not convinced yet, tell me more, so<br>
DependentHaskell: maybe<br>
<br>
---- end example ----<br>
<br>
then you have voted for DeriveFooBar and ImplicitExceptions. Only “yes”<br>
matters, “no”, “maybe” and “later” are all ignored.<br>
<br>
I will shortly send my first ballot around. Also see the end of this<br>
mail for a copy’n’paste template.<br>
<br>
You can update your vote as often as you want. Please always send your<br>
full votes (I will only consider your latest email). I encourage you to<br>
do that early, e.g. maybe start with a mail where you list the obvious<br>
yes and nos, and keep some at maybe and then refine.<br>
<br>
The timeline says first votes should be in within two weeks, and then a<br>
bit more to refine. But the earlier the merrier!<br>
<br>
The quota is 8. In particular, if everyone votes (and I hope everyone<br>
will), an extension won’t make it this round if 4 don’t include it.<br>
<br>
## Data<br>
<br>
Please see <br>
<a href="https://github.com/ghc-proposals/ghc-proposals/blob/ghc2021/proposals/0000-ghc2021.rst#data" rel="noreferrer" target="_blank">https://github.com/ghc-proposals/ghc-proposals/blob/ghc2021/proposals/0000-ghc2021.rst#data</a><br>
for the data, including explanations. It is intentionally not sorted by<br>
the data, as the choice of ranking function would already be quite<br>
influencing.<br>
<br>
You may want to play around with that data, e.g. sort it by your own<br>
criteria etc. I looked long for an online service where I can upload<br>
the data and allow you to explore it, but then I noticed that that's a<br>
bit stupid, since we all probably can do it best with Haskell.<br>
<br>
So I made it easy to load the data into GHCi, see the instructions at<br>
<a href="https://github.com/nomeata/ghc-proposals-stats/blob/master/ext-stats/README.md" rel="noreferrer" target="_blank">https://github.com/nomeata/ghc-proposals-stats/blob/master/ext-stats/README.md</a><br>
which allow you, for example, to do this<br>
<br>
*Main> mapM_ (\E{..} -> Text.Printf.printf "%s: %d\n" ext survey_no) $ take 10 $ reverse $ sortOn (\E{..} -> survey_no) (M.elems exts)<br>
AllowAmbiguousTypes: 195<br>
CPP: 192<br>
IncoherentInstances: 176<br>
Arrows: 156<br>
Strict: 153<br>
ImplicitParams: 147<br>
UndecidableInstances: 144<br>
OverlappingInstances: 144<br>
Unsafe: 139<br>
TemplateHaskell: 137<br>
<br>
Of course, if someone wants to upload the data somewhere and share<br>
that, that's also useful.<br>
<br>
<br>
Let me know if some of this doesn't quite work for you, and should be<br>
improved. Maybe we need a web form instead of mails?<br>
<br>
<br>
## PS: Blank ballot<br>
<br>
To start, you could copy the following into an email<br>
<br>
AllowAmbiguousTypes: maybe<br>
ApplicativeDo: maybe<br>
Arrows: maybe<br>
BangPatterns: maybe<br>
BinaryLiterals: maybe<br>
BlockArguments: maybe<br>
CApiFFI: maybe<br>
CPP: maybe<br>
CUSKs: maybe<br>
ConstrainedClassMethods: maybe<br>
ConstraintKinds: maybe<br>
DataKinds: maybe<br>
DatatypeContexts: maybe<br>
DefaultSignatures: maybe<br>
DeriveAnyClass: maybe<br>
DeriveDataTypeable: maybe<br>
DeriveFoldable: maybe<br>
DeriveFunctor: maybe<br>
DeriveGeneric: maybe<br>
DeriveLift: maybe<br>
DeriveTraversable: maybe<br>
DerivingStrategies: maybe<br>
DerivingVia: maybe<br>
DisambiguateRecordFields: maybe<br>
DuplicateRecordFields: maybe<br>
EmptyCase: maybe<br>
EmptyDataDecls: maybe<br>
EmptyDataDeriving: maybe<br>
ExistentialQuantification: maybe<br>
ExplicitForAll: maybe<br>
ExplicitNamespaces: maybe<br>
ExtendedDefaultRules: maybe<br>
FlexibleContexts: maybe<br>
FlexibleInstances: maybe<br>
ForeignFunctionInterface: maybe<br>
FunctionalDependencies: maybe<br>
GADTSyntax: maybe<br>
GADTs: maybe<br>
GHCForeignImportPrim: maybe<br>
GeneralisedNewtypeDeriving: maybe<br>
HexFloatLiterals: maybe<br>
ImplicitParams: maybe<br>
ImportQualifiedPost: maybe<br>
ImpredicativeTypes: maybe<br>
IncoherentInstances: maybe<br>
InstanceSigs: maybe<br>
InterruptibleFFI: maybe<br>
KindSignatures: maybe<br>
LambdaCase: maybe<br>
LexicalNegation: maybe<br>
LiberalTypeSynonyms: maybe<br>
LinearTypes: maybe<br>
MagicHash: maybe<br>
MonadComprehensions: maybe<br>
MonadFailDesugaring: maybe<br>
MonoLocalBinds: maybe<br>
MultiParamTypeClasses: maybe<br>
MultiWayIf: maybe<br>
NPlusKPatterns: maybe<br>
NamedFieldPuns: maybe<br>
NamedWildCards: maybe<br>
NegativeLiterals: maybe<br>
NoImplicitPrelude: maybe<br>
NoMonomorphismRestriction: maybe<br>
NoPatternGuards: maybe<br>
NoTraditionalRecordSyntax: maybe<br>
NondecreasingIndentation: maybe<br>
NullaryTypeClasses: maybe<br>
NumDecimals: maybe<br>
NumericUnderscores: maybe<br>
OverlappingInstances: maybe<br>
OverloadedLabels: maybe<br>
OverloadedLists: maybe<br>
OverloadedStrings: maybe<br>
PackageImports: maybe<br>
ParallelListComp: maybe<br>
PartialTypeSignatures: maybe<br>
PatternSynonyms: maybe<br>
PolyKinds: maybe<br>
PostfixOperators: maybe<br>
QualifiedDo: maybe<br>
QuantifiedConstraints: maybe<br>
QuasiQuotes: maybe<br>
RankNTypes: maybe<br>
RebindableSyntax: maybe<br>
RecordWildCards: maybe<br>
RecursiveDo: maybe<br>
RoleAnnotations: maybe<br>
Safe: maybe<br>
ScopedTypeVariables: maybe<br>
StandaloneDeriving: maybe<br>
StandaloneKindSignatures: maybe<br>
StarIsType: maybe<br>
StaticPointers: maybe<br>
Strict: maybe<br>
StrictData: maybe<br>
TemplateHaskell: maybe<br>
TemplateHaskellQuotes: maybe<br>
TransformListComp: maybe<br>
Trustworthy: maybe<br>
TupleSections: maybe<br>
TypeApplications: maybe<br>
TypeFamilies: maybe<br>
TypeFamilyDependencies: maybe<br>
TypeInType: maybe<br>
TypeOperators: maybe<br>
TypeSynonymInstances: maybe<br>
UnboxedSums: maybe<br>
UnboxedTuples: maybe<br>
UndecidableInstances: maybe<br>
UndecidableSuperClasses: maybe<br>
UnicodeSyntax: maybe<br>
UnliftedFFITypes: maybe<br>
UnliftedNewtypes: maybe<br>
Unsafe: maybe<br>
ViewPatterns: maybe<br>
<br>
<br>
<br>
<br>
-- <br>
Joachim Breitner<br>
  <a href="mailto:mail@joachim-breitner.de" target="_blank">mail@joachim-breitner.de</a><br>
  <a href="http://www.joachim-breitner.de/" rel="noreferrer" target="_blank">http://www.joachim-breitner.de/</a><br>
<br>
<br>
_______________________________________________<br>
ghc-steering-committee mailing list<br>
<a href="mailto:ghc-steering-committee@haskell.org" target="_blank">ghc-steering-committee@haskell.org</a><br>
<a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" rel="noreferrer" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><br>
</blockquote></div>