wiki:Status/SLPJ-Tickets

This page collects tickets that Simon PJ is interested in, so that he remembers them

Urgent or in-flight

Generics and DeriveAnyClass

  • #10598: DeriveAnyClasss and GND
  • #10604: make Generic1 kind-polymorphic
  • #10087: typechecking generic default methods (Pedro)
  • #10487: Generic name clash
  • #10514: Generic for existentials

Impredicativity and higher rank

Performance (compile time or runtime)

  • #8095: very slow constraint solving
  • #5642: slow constraint solving
  • #9979: attoparsec regressed 7.8.4 to HEAD
  • #8852, #8980, #8941 (possibly), #9803, #8960, #7898, #7068, #7944, #5550, #8836: SpecConstr blowup
  • #10289: 2.5k static HashSet takes too much memory to compile
  • #9669, #9557, #8731: slow compilation with lots of deriving clauses
  • #9583, #9630: code blowup in Generics/Binary
  • #10228: compile-time regression from 7.8.4 to 7.10.1
  • #7450, #7258: deriving Read generates gigantic code. Better now, but still not linear.
  • #7428: Non-linear compile time: addFingerprint??
  • #2346: desugaring let-bindings
  • Use wildcards for dead variables in interface files.

Front end

  • #10321: normalising a type in :type in GHCi
  • #10018: fixity for data constructors in GHCi
  • #10318, #10592: recursive superclasses
  • #10179: displaying kinds
  • #10089: better warnings for unused data types (involves instances)
  • #8581: bidirectional pattern synonyms (with different constraints)
  • #10027: export behaviour for data families
  • #9223: error message mentioning untouchables
  • #9198: slow typechecker (big types!)
  • #9210, #10675: functional dependencies and overlapping instances
  • #8673: more generous GADT record selectors
  • #8550: Don't build recursive type-function dictionaries
  • #8281: UnliftedFFITypes etc
  • #8441: family instances in hs-boot files
  • #9450: need more eager checking of compatibility with hs-boot files
  • #7259: Eta-expansion of products in System FC
  • #7204: a class to controll FFI marshalling; and newtype deriving for classes with ATs
  • #7842: polymorphism in recursive do-blocks

Type inference

  • #10614: display constraints for typed holes
  • #10183: warning for redundant constraints, and pattern-match overlap warnings
  • #8171: extended default rules
  • #7828, #5267, #5777, #5333, #344: bugs in arrows
  • #7862: overlap beween givens and instances

Type families, roles, Coercible, Typeable, kind polymorphism

  • #10493, #10494: Bogus inaccessible code from Coercible
  • #10362, #10359: make tuple constraints into a class
  • #9858, #10343: Typeable and kind polymorphism
  • #10347: wrong "unused data constructor" warning for a newtype (using Coercible)
  • #10184,#10185: incompleteness in Coercible solver
  • #8165: GND for classes with associated types
  • #10075: Constraint vs *
  • #10056: more systematic treatment of (~) in parser and renamer
  • #9918: closed type families, apartness, and overlapping instances (inconsistency)
  • #9118: Eta reduction for Coercible (not expressible in Core, yet)
  • #6018, #10227: injective type families
  • #8161: associated type more specific than class decl
  • #8177: role signature for type families

Template Haskell

See also TemplateHaskell

  • #10267: typed holes and TH
  • #10548: partial type sigs and TH
  • #10047: inconsistency in name binding between splice and quasiquotation
  • #10486: allow addTopDecls to create annotations
  • #10541: reify kind information
  • #10385: TH and annotations
  • #10279, wiki page: reifyPackage
  • #10330: better TH error locations
  • #6089: nested declaration splices
  • #10271: difficulty resolving overloading in typed TH
  • #9113: pattern match overlap/exhaustiveness checked in Typed TH
  • TemplateHaskell/Annotations Gergely's work on annotations in TH
  • #1475: allow splicing of import declarations (5 in cc list)
  • #1012: mutually recursive modules and TH
  • #5959: top level splices and renaming
  • #5416: local modules
  • #4372: better quasiquotation support
  • #2041: Splicing in concrete syntax
  • #1475: Allow TH to generate import declarations
  • #2340: Better TH error recovery. Easy to do; change to signature of qRecover.
  • #4222: design of reification for TH

Demand analysis and CSE

Arity

  • #9388: narrow the state hack
  • #10260, #9020, #10319: not enough eta expansion
  • #7542: optimisation of eta expansion/reduction
  • #5809: arity analysis could be better
  • #3924: weak arity leads to weak strictness
  • #3698: arity analysis again
  • #3697: class method selectors
  • #3034: divInt and arity
  • #2915: arity too small
  • #2823: another arity expansion bug (related to dictionaries)
  • #2440: bad code with type families; I believe this is also arity-related
  • #1547: profiling and arity
  • #5587, #7364: eta-expansion can imcrease termination. These tickets are closed because we don't know how to fix them properly, not becuase they are really fixed.

Inlining

Optimisation

  • #8457 (summarises), #917, #1945, #3273, #4276, #5729 (closed as dups, but not fixed): full laziness sometimes makes things worse.
  • #10528, #10595: RULES for class methods
  • #10535, #7367, #7206, #7309: float-out and excessive sharing
  • #9370, #8635: respecting mixed -O and -O0 in ghc --make, especially concerning cross-module inlining
  • #9279: local wrapper remains in final program
  • #9246: Too much case-of-case leads to bad code
  • #9136: better constant folding
  • #9041: bad code from native code generator (NCG)
  • #6056: conflict between the w/w unfolding and the one from INLINEABLE
  • #8472: top level unlifted string literals
  • #8335: more gc entry points
  • #8336: sinking pass does not sink
  • #8327: dead code (in heap checks) not eliminated by C--
  • #8317, #8326, #9661: don't push heapchecks into case branches too aggressively. This is closely related to work Jan Stolarek did on unboxed booleans #6135; and perhaps also to #10124, #10137
  • #8308: resurrect ticky histograms
  • #8321: branch prediction for stack/heap checks for LLVM
  • #8279: alignment and its effect on performance
  • #1498: heap checks in recursive functions
  • #7378: (a) identical-alts when the RHSs are bigger; (b) nested comparisions (cf #2132)
  • #7511: inlining can make programs allocate MORE!!
  • #7307: low hanging fruit for shrinking code size for string constants and top-level indirections
  • #8833, #3872, #5400, #5448, #5722, #7057, #7369, #9235: contravariant data type loop in simplifier inliner
  • #5954: performance regression. Duplication of primops?
  • #6047: GHC retains unnecessary binding
  • #2439: Strict dictionaries; see also map/coerce rule #9792
  • #5916, #10678: runST isn't free
  • #5522, #6092: liberate-case runs out of memory
  • #3990, #7647: UNPACK for data families, and with phantom types, needs data con wrapper refactoring; see also #9655 if you are in this area.
  • #5928: running Specialise more than once

Numerics, floating point, and primops

  • #10555: division primops on LHS of a RULE
  • #9407: 64-bit floating point behaves differently with and without -O
  • #5780: aggressive-primop attempt that didn't quite work
  • #9328, #10215: negative zero and case expressions
  • #9304: floating point woes: 32 vs 64 bit
  • #5615: poor code for div with powers of 2
  • #4101: constant folding for (**)
  • #3676: realToFrac conversions
  • #3744: comparisons against minBound and maxBound are not optimised away
  • #2269: Word type to Double or Float conversions
  • #3070: NaNs and divide-by-zero
  • #9251: branchless max/min
  • #9276: auditing for IEEE compliance

Features

  • #9049: explicit call stack, abstractable call site information
  • #5972: option to suppress record selectors

Cmm and code generation

  • #10012: Cheap-to-compute values aren't pushed into case branches
  • #9718: avoiding TidyPgm having to predict arity and CAF-ref-ness
  • #9159: jump tables for dense cases
  • #9157: common block elimination
  • #8905: spilling around an eval
  • #8903: dead stores
  • #8887: double assignment
  • #8871: Cmm optimisation opportunity
  • #8585: loopification
  • Summary ticket: #4258, and wiki page
  • #3462: allocate large objects with allocateLocal()
  • #2289: cheap check at start of case alternatives
  • #2731: avoiding unnecessary evaluation when unpacking constructors
  • #4121: arity and CAF info computation is horribly fragile

Optimiser

  • #10346, #2255, #3767, #2642, #3831, #4941, #2598: Improve SpecConstr in various ways, including for free variables, and for join points.
  • #5059: specialise on value arguments
  • #5974: casts, RULES, and parametricity
  • #5262: seq magic
  • #605: strict/unboxed enumerations
  • #2607: space leak: inlining defeats selector thunk optimisation
  • #4470: merge identical counters
  • #2988: better float-in
  • #2374: SAT and MutableByteArray Max?
  • #7080: inconsistent treatment of RULES and SPECIALISE
  • #876: make length into a good consumer. Perhaps using foldl?

GHCi

  • #9394: Display type/data family instance information in :info
  • #4017: unhelpful GHCi message


Outright bugs

  • #1241: Lifting the Coverage Condition for functional dependencies isn’t the Right Thing Manuel

Types and type inference

  • TypeFunctionsStatus
  • #10338: delicacy in generalisation: MonoLocalBinds isn't enough
  • #9637: type level error messages
  • #9587, #9607: -XAllowAmbiguousTypes debate
  • #9334: instance chains
  • #9427: SCC analysis for type and class decls
  • #9422: Glomming all instances in EPT is too crude for --make
  • #7503: Kind polymorphism and mutual recursion
  • #6018, #4259: Injective type families and type family overlap
  • #4296: SkolemOccurs
  • #816. #3108: extreme delicacy in solve order, involving fundeps
  • #8109: as-patterns in type-family declarations
  • #6065: GHC suggests a type signature that it then rejects
  • #5320, #7296: overlap delicacy
  • #1965: make existentials have a really cheap implementation
  • #5224: make it cheaper to check for inconsistent type family instances
  • #4466, #5296, #8631: explicit type application
  • #4259: overlapping type family instances
  • #3490: superclasses and ambiguity
  • #3632: better update for records with existentials
  • #2641: revise what -XExtendedDefaultRules does

Better error messages

  • #10450: poor error message when arg is insufficiently polymorphic
  • #9901: f is applied to two arguments, but its type has only two
  • #9479: more info in "hole" error messages
  • #9456: more info in "relevant bindings" message
  • #9244: suggest scoped type variables
  • #9173: inferred/expected error messages
  • #1330: another bad error message (Church2)
  • #2648: Report out of date interface files robustly
  • #1928: Confusing type error message (Claus makes suggestions)

Features

  • #6024: allow defining a kind without also getting the corresponding type
  • #5927: Constraints with universal quantification
  • #5429: docase and joinads
  • #5073: blockST and friends
  • #2895: Class aliases
  • #2595: record updates
  • #4823: strength reduction for array indexing
  • #4479: type directed name resolution (TDNR)
  • #4426: simpler rule for implicit quantification
  • #10393, #10116, #9951, #595, #5728, #3927, #5724, #5762, #4139, #6124, #7669, #322, #8016, #8494, #8853, #8970, #9113, #2204: pattern-match overlap checking, including with GADTs
  • #3701: Implicitly declared existentials: a class as a type
  • #3217: better flag handling for GHCi
  • #2600, #2110: Bind type variables and constraints in RULES
  • #960: Generate local info for ‘undefined’. Implicit location parameters in general
  • #2135: Warn when exporting a function whose type mentions a type constructor defined locally but not itself exported
  • #2119: Explicitly importing deprecated symbols should generate deprecation warnings
  • #2207: Load interfaces for GHC.* even without -O
  • #1231: Better deprecations

Not sure what to do about these

  • #7897: make the fingerprint in a TypeRep be a proper fingerprint, including the type definition all the way down (see Recompilation avoidance)
  • #2284, #1168, #7561, #9349: the state-hack "optimisation" causes much re-computation
  • #4005: generational GC pathalogical case
  • #1349: strict function argument types
Last modified 5 days ago Last modified on Jul 29, 2015 8:22:20 PM