<html><body>
        <div dir="ltr">Thanks everybody for an illuminating discussion about DeriveAnyClass. I was not aware of the dark corners of the extension (and actually, now I find it weird that GHC itself suggests that extension!). Here are my updated votes; apart from a ’No’ to DeriveAnyClass I’ve updated my votes of StandaloneKindSignatures and ImportQualifiedPost to ‘Yes’.</div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr">-- the ones with comments</div><div dir="ltr">CUSKs: no<br></div><div dir="ltr">-- ^ according to the guide, this is superseded by StandaloneKindSignatures</div><div dir="ltr">ConstrainedClassMethods: yes<br></div><div dir="ltr">-- ^ it is implied by MultiParamTypeClasses anyway</div><div dir="ltr">DefaultSignatures: no<br></div><div dir="ltr">-- ^ as Joachim says, this should be succeeded by DerivingVia</div><div dir="ltr">-- ^ anyway, this is one required for the writer of the class, so no big deal</div><div dir="ltr">DeriveAnyClass: no<br></div><div dir="ltr">-- ^ I think this makes no harm, and I tend to use deriving (ToJSON, FromJSON)</div><div dir="ltr">DerivingVia: yes<br></div><div dir="ltr">-- ^ even though it’s quite recent, I think it’s quite sensible and I don’t foresee many changes to it</div><div dir="ltr">DisambiguateRecordFields: no<br>DuplicateRecordFields: no<br></div><div dir="ltr">-- ^ we seem to still be working on this</div><div dir="ltr">FunctionalDependencies: maybe<br></div><div dir="ltr">-- ^ this is a hard one! Not so terrible since it’s only required by the creator of the class, not of the instances</div><div dir="ltr">MonadFailDesugaring: yes<br></div><div dir="ltr">-- ^ isn’t this the default nowadays?</div><div dir="ltr">MonoLocalBinds: maybe<br></div><div dir="ltr">-- ^ this is implied by GADTs, but otherwise we shouldn’t</div><div dir="ltr">MultiWayIf: no<br></div><div dir="ltr">-- ^ still in discussion</div><div dir="ltr">NamedWildCards: yes<br></div><div dir="ltr">-- ^ not many people use this, but I think this is the sane default</div><div dir="ltr">OverloadedLists: yes<br>OverloadedStrings: yes<br></div><div dir="ltr">-- ^ I would love to see these included, but I agree with the sentiment that they need more work</div><div dir="ltr">PartialTypeSignatures: no<br></div><div dir="ltr">-- ^ I really think that partial type signatures should not be accepted by default</div><div dir="ltr">QuantifiedConstraints: maybe<br></div><div dir="ltr">-- ^ too early, may want to refine this</div><div dir="ltr">ScopedTypeVariables: yes<br></div><div dir="ltr">-- ^ I think this is really well understood and people want it</div><div dir="ltr">PatternSynonyms: maybe<br></div><div dir="ltr">-- ^ we are still working out the edges of this</div><div dir="ltr"><br></div><div dir="ltr">-- these seem simple syntactic extensions</div><div dir="ltr">-- many of them bring compatibility with the syntax of Java-like languages</div><div dir="ltr">BinaryLiterals: yes<br></div><div dir="ltr">HexFloatLiterals: yes<br></div><div dir="ltr">NegativeLiterals: yes<br></div><div dir="ltr">NumDecimals: yes<br>NumericUnderscores: yes<br></div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr">-- too early but wouldn’t care to introduce it</div><div dir="ltr">StandaloneKindSignatures: yes</div><div dir="ltr">ImportQualifiedPost: yes</div></div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr">-- don’t know</div><div dir="ltr">ForeignFunctionInterface: maybe</div><div dir="ltr">GHCForeignImportPrim: maybe</div><div dir="ltr">InterruptibleFFI: maybe</div><div dir="ltr">LexicalNegation: maybe</div><div dir="ltr">NondecreasingIndentation: maybe</div><div dir="ltr">PackageImports: maybe</div><div dir="ltr">ParallelListComp: maybe</div><div dir="ltr">StarIsType: maybe<br></div><div dir="ltr">TransformListComp: maybe</div><div dir="ltr">UnliftedFFITypes: maybe<br>UnliftedNewtypes: maybe<br></div><div dir="ltr">UnicodeSyntax: maybe<br></div></div><div dir="ltr"><br></div><div dir="ltr">-- the rest</div><div dir="ltr">AllowAmbiguousTypes: no<br>ApplicativeDo: no<br>Arrows: no<br>BangPatterns: yes<br>BlockArguments: no<br>CApiFFI: no<br>CPP: no<br>ConstraintKinds: yes<br>DataKinds: yes<br>DatatypeContexts: no<br>DeriveDataTypeable: yes<br>DeriveFoldable: yes<br>DeriveFunctor: yes<br>DeriveGeneric: yes<br>DeriveLift: yes<br>DeriveTraversable: yes<br>DerivingStrategies: yes<br>EmptyCase: yes<br>EmptyDataDecls: yes<br>EmptyDataDeriving: yes<br>ExistentialQuantification: yes<br>ExplicitForAll: yes<br>ExplicitNamespaces: no<br>ExtendedDefaultRules: no<br>FlexibleContexts: yes<br>FlexibleInstances: yes<br>GADTSyntax: yes</div><div dir="ltr">-- ^ implied by GADTs anyway<br>GADTs: yes<br>GeneralisedNewtypeDeriving: yes<br>ImplicitParams: no<br>ImpredicativeTypes: no<br>IncoherentInstances: no<br>InstanceSigs: yes<br>KindSignatures: yes<br>LambdaCase: yes<br>LiberalTypeSynonyms: no<br>LinearTypes: no<br>MagicHash: no<br>MonadComprehensions: no<br>MultiParamTypeClasses: yes<br>NPlusKPatterns: no<br>NamedFieldPuns: yes<br>NoImplicitPrelude: no<br>NoMonomorphismRestriction: yes</div><div dir="ltr">NoPatternGuards: no<br>NoTraditionalRecordSyntax: no<br>NullaryTypeClasses: yes<br>OverlappingInstances: no<br>OverloadedLabels: no<br>PolyKinds: yes<br>PostfixOperators: yes<br>QualifiedDo: no<br>QuasiQuotes: no<br>RankNTypes: no<br>RebindableSyntax: no<br>RecordWildCards: yes<br>RecursiveDo: no<br>RoleAnnotations: no<br>Safe: no<br>StandaloneDeriving: yes<br>StaticPointers: no<br>Strict: no<br>StrictData: no<br>TemplateHaskell: no<br>TemplateHaskellQuotes: no<br>Trustworthy: no</div><div dir="ltr">TupleSections: yes<br>TypeApplications: yes<br>TypeFamilies: yes<br>TypeFamilyDependencies: no<br>TypeInType: maybe<br>TypeOperators: yes<br>TypeSynonymInstances: yes<br>UnboxedSums: no<br>UnboxedTuples: no<br>UndecidableInstances: no<br>UndecidableSuperClasses: no<br>Unsafe: no<br>ViewPatterns: yes</div><br>
    <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On 30 Nov 2020 at 18:33:55, Richard Eisenberg <<a href="mailto:rae@richarde.dev">rae@richarde.dev</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">
            <div style="word-wrap:break-word;line-break:after-white-space" class=""><div dir="ltr" class="">I also adopted Iavor's very helpful categorization.</div><div dir="ltr" class=""><br class=""></div><div dir="ltr" class="">I have not given any motivations below, as it's too difficult to read everyone's motivations inline. Instead, I give several varieties of "no" votes. Let's debate when someone disagrees with me. (To be clear: "obscure" just means that someone should manually opt in, not that the feature is really obscure.)</div><div dir="ltr" class=""><br class=""><b class="">Module System<br class="">=============</b><br class=""><br class="">ImportQualifiedPost: yes<br class="">PackageImports: obscure<br class="">NoImplicitPrelude: breaking<br class=""><br class=""><b class="">Notation<br class="">========</b><br class=""><br class="">BlockArguments: yes<br class="">MultiWayIf: might change<br class="">LambdaCase: might change<br class="">BinaryLiterals: yes<br class="">HexFloatLiterals: yes<br class="">NumericUnderscores: yes<br class="">NumDecimals: yes<br class="">OverloadedStrings: bad for beginners<br class="">OverloadedLists: bad for beginners<br class="">OverloadedLabels: obscure<br class="">EmptyCase: yes<br class="">PostfixOperators: yes<br class="">LexicalNegation: yes<br class="">UnicodeSyntax: yes<br class="">NegativeLiterals: superseded<br class="">TupleSections: yes<br class="">ImplicitParams: obscure<br class="">ParallelListComp: yes<br class="">RecursiveDo: obscure<br class="">TransformListComp: obscure<br class="">Arrows: obscure<br class="">ApplicativeDo: breaking<br class="">QualifiedDo: too fresh<br class="">MonadComprehensions: bad for beginners<br class="">NondecreasingIndentation: obscure</div><div dir="ltr" class="">RebindableSyntax: breaking<br class="">ExplicitNamespaces: yes<br class=""><div class=""><br class=""></div><div class=""><b class="">Data Types<br class="">==========<br class=""></b><br class="">DatatypeContexts: no<br class="">ExistentialQuantification: yes<br class="">EmptyDataDecls: yes<br class="">RoleAnnotations: yes<br class="">StrictData: breaking<br class="">GADTSyntax: yes<br class="">GADTs: obscure<br class=""></div><div class=""><br class=""></div><div class=""><b class="">Patterns and Guards<br class="">===================</b><br class=""><br class=""></div><div class="">BangPatterns: yes<br class="">ViewPatterns: yes<br class="">PatternSynonyms: too fresh<br class="">NoPatternGuards: breaking<br class="">NPlusKPatterns: deprecated<br class=""><br class=""><b class="">Records<br class="">=======</b><br class=""><br class="">NamedFieldPuns: yes<br class="">RecordWildCards: confusing<br class="">DisambiguateRecordFields: yes<br class="">DuplicateRecordFields: might change<br class="">NoTraditionalRecordSyntax: no<br class=""><br class=""></div><div class=""><b class="">Deriving<br class="">=======</b><br class=""><br class="">DeriveGeneric: yes<br class="">DeriveLift: yes<br class="">DeriveDataTypeable: yes<br class="">EmptyDataDeriving: yes<br class="">StandaloneDeriving: yes<br class="">DeriveFunctor: yes<br class="">DeriveFoldable: yes<br class="">DeriveTraversable: yes<br class="">DerivingStrategies: yes<br class="">DerivingVia: yes<br class="">GeneralisedNewtypeDeriving: yes<br class="">DeriveAnyClass: dangerous<br class=""></div><div class=""><br class=""></div><div class=""><b class="">Class System<br class="">============</b><br class=""><br class="">MultiParamTypeClasses: yes<br class="">NullaryTypeClasses: superseded<br class="">ConstraintKinds: yes<br class="">TypeSynonymInstances: yes<br class="">FlexibleInstances: yes<br class="">FlexibleContexts: yes<br class="">ConstrainedClassMethods: yes<br class="">DefaultSignatures: yes<br class="">InstanceSigs: yes<br class="">ExtendedDefaultRules: might change<br class="">FunctionalDependencies: obscure<br class="">QuantifiedConstraints: too fresh<br class="">UndecidableInstances: dangerous<br class="">IncoherentInstances: dangerous<br class="">UndecidableSuperClasses: dangerous<br class="">OverlappingInstances: superseded<br class=""><b class=""><br class=""></b></div><div class="">Types<br class=""><b class="">=====</b><br class=""><br class="">RankNTypes: yes<br class="">StandaloneKindSignatures: yes<br class="">KindSignatures: yes<br class="">LiberalTypeSynonyms: confusing<br class="">ScopedTypeVariables: might change<br class="">ExplicitForAll: yes<br class="">AllowAmbiguousTypes: dangerous<br class="">ImpredicativeTypes: too fresh<br class="">MonoLocalBinds: breaking<br class="">NoMonomorphismRestriction: debate!<br class="">PartialTypeSignatures: obscure<br class="">NamedWildCards: yes<br class="">LinearTypes: too fresh<br class="">TypeApplications: yes<br class="">PolyKinds: yes<br class="">TypeOperators: yes<br class="">StarIsType: deprecated<br class="">TypeFamilies: obscure<br class="">TypeFamilyDependencies: obscure<br class="">DataKinds: might change<br class=""><br class=""></div><div class=""><b class="">FFI<br class="">===</b><br class=""><br class="">ForeignFunctionInterface: obscure<br class="">CApiFFI: obscure<br class="">GHCForeignImportPrim: obscure<br class="">InterruptibleFFI: obscure<br class="">UnliftedFFITypes: obscure<br class="">StaticPointers: obscure<br class=""><br class=""><b class="">Low Level<br class="">=========</b><br class=""><br class="">UnboxedSums: obscure<br class="">UnboxedTuples: obscure<br class="">MagicHash: obscure<br class="">UnliftedNewtypes: yes<br class=""><br class=""><b class="">Macros<br class="">======</b><br class=""><br class="">CPP: obscure<br class="">TemplateHaskell: TH<br class="">TemplateHaskellQuotes: yes<br class="">QuasiQuotes: TH</div><div class=""><br class=""></div><div class=""><br class=""><b class="">Other<br class="">=====</b><br class=""><br class="">Unsafe: no<br class="">Safe: no<br class="">Trustworthy: no<br class="">Strict: no<br class=""><br class=""><b class="">Obsolete/Deprecated<br class="">===================</b><br class=""><br class=""></div><div class="">CUSKs: no<br class="">TypeInType: no<br class="">MonadFailDesugaring: maybe<br class=""><br class=""><br class=""><br class=""></div></div></div>
        </blockquote>
    </div>
</div>
    
</body></html>