Changes between Version 48 and Version 49 of Records/OverloadedRecordFields/Implementation


Ignore:
Timestamp:
Aug 23, 2013 8:16:17 AM (8 months ago)
Author:
adamgundry
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Records/OverloadedRecordFields/Implementation

    v48 v49  
    102102Typeclass and family instances are generated by `addLocalRecFldInsts` in `TcInstDecls`, regardless of whether or not the extension is enabled. This is called by `tcInstDecls1` to generate instances for fields from datatypes in the current group (at the same time as derived instances, from '''deriving''' clauses, are generated). The typeclass instances must be subsequently typechecked (by `tcInstDecls2`). Such instances are "private" in that they are available when typechecking the current module (in `tcg_inst_env`) but not exported to other modules (via `tcg_insts`). On the other hand, the underlying dfun ids and axioms are exported from the module as usual. 
    103103 
    104 '''AMG''' This means that typeclass instances are not visible in GHCi, because it tracks only `tcg_insts` (via the `InteractiveContext`). What to do here? Perhaps a new field in `TcGblEnv` could record the private instances? 
     104'''AMG''' This means that typeclass instances are not visible in GHCi, because it tracks only `tcg_insts` (via the `InteractiveContext`). I've added new fields in `TcGblEnv` to record the private instances, but there is still work to do here. 
    105105 
    106106Moreover, `tcRnImports` calls `addImportedRecFldInsts` to add instances for overloaded record fields ''that are in scope'' from other modules. (This is different from the usual visible-everywhere story for instances.) We know which overloaded fields are in scope by looking at the `GlobalRdrEnv`. Since the dfuns and axioms are available, it is easy to turn them into appropriate `ClsInst`s and `FamInst`s.  
    107107 
    108 '''AMG''' This is the general idea, but there are some bugs left to iron out: 
    109  
    110 * `tcIfaceGlobal` gives "not found" errors when compiling `TyCon.hs` for the stage 2 compiler. I think this might be something to do with the cycle with `Class.hs`. 
    111 * `addPrivateTyFamInsts` leads to fingerprinting errors, presumably because exporting an axiom without its family instance is not handled correctly. 
    112 * When the extension is disabled, the instances are still generated and typechecked, and they must be in scope (via `addPrivateClsInsts`/`addPrivateTyFamInsts`) while they are being typechecked. This means `tcInstDecls1` and `2` need some refactoring. 
     108'''AMG''' When the extension is disabled, the instances are still generated and typechecked, and they must be in scope (via `addPrivateClsInsts`/`addPrivateTyFamInsts`) while they are being typechecked. This means `tcInstDecls1` and `2` need some refactoring. 
    113109 
    114110 
     
    271267* With fundep in class, we don't need it in the instance. 
    272268* Always mangle selector names (for simplicity)? 
    273   * Sort out impedance mismatch with boot files, if easy or enough people care 
    274   * Check import/export behaviour 
     269  * Trouble with import/export 
     270  * Trouble with deriving instances in GHC.Generics (makes up un-renamed syntax using field `RdrName`s) 
     271  * Sort out impedance mismatch with boot files 
    275272* Minimise contents of `AvailInfo` (preferably just a list of field `OccName`s): use `newGlobalBinder` to lookup cached mangled names for selectors and pieces 
    276273 
    277274* Sort out reporting of unused imports. 
    278275* Make instances available to GHCi. 
     276* Fix Haddock. 
    279277 
    280278* Consider syntactic sugar for `Upd` constraints.