<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>I'll take a look in the next few days. I'm concerned about that performance regression -- we'll need to get a handle on it.</div><div><br></div><div>Enjoy your holiday!</div><div><br></div><div>Richard</div><br><div><div>On Mar 26, 2015, at 8:48 AM, Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div lang="EN-GB" link="#0563C1" vlink="#954F72" style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div class="WordSection1" style="page: WordSection1; "><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">Iavor, Richard, and others<o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">We always thought it was the Right Thing to generate the runtime representation for a TyCon (used in Typeable type representations) at the definition site of the type, not “on the fly”.  I thought I’d do this.<o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">But it was a LOT harder than I expected.  I have spent a ridiculous amount of time on it over the last three weeks.  Sigh.<o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">However (a) it’s done, (b) I did a lot of other tidying up (as usual).  So I’m keen to use it.  <o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><b><span style="font-size: 12pt; ">Would you like to take a look?</span></b><span style="font-size: 12pt; ">  It’s on branch wip/T9858-typeable-spj.  Relevant log messages below.<o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">Unsurprisingly, some perf/compiler tests get a bit slower (see below). <o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">More surprisingly, there are two perf/should_run tests that get worse<o:p></o:p></span></p><p class="Code" style="margin: 6pt 0cm 6pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   perf/should_run  T5205 [stat not good enough] (normal)<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 6pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   perf/should_run  lazy-bs-alloc [stat not good enough] (normal)<o:p></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">This is much more surprising: neither seems to have anything much to do with Typeable.  But I can’t investigate before I go on holiday. Would anyone else like to?<o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">It’s all up to date wrt HEAD.<o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; ">Simon<o:p></o:p></span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; "> </span></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; "> </span></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">commit fcd18c42b6ae2e73a9f4c67dbe6d994b0f8468c8<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Author: Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(149, 79, 114); text-decoration: underline; ">simonpj@microsoft.com</a>><o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Date:   Thu Mar 26 11:06:12 2015 +0000<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Remove a redndant 'return'<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">commit a6200759fd2f3f0e901cb2092e148bf31abb08b4<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Author: Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(149, 79, 114); text-decoration: underline; ">simonpj@microsoft.com</a>><o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Date:   Mon Mar 23 14:53:53 2015 +0000<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Error message wibbles<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    These are associated with<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">     - new instance reporting<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">     - typeable changes in -ddump-simpl output<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">     - -ddump-types being a bit less verbose<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">     - some renaming of type variables in debugger output (no idea why this happens)<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">commit fe510d911b6cf61d6884b8b42d8771d4aea3229f<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Author: Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(149, 79, 114); text-decoration: underline; ">simonpj@microsoft.com</a>><o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Date:   Mon Mar 23 14:50:23 2015 +0000<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Generate Typeble info at definition sites<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    This patch implements the idea floated in #9858, namely that we should<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    generate type-representation information at the data type declaration<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    site, rather than when solving a Typeable constraint.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    However, this turned out quite a bit harder than I expected.  I still<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    think it's the right thing to do, and it's done now, but it was quite<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    a struggle.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    See particularly<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      * Note [Grand plan for Typeable] in TcTypeable (which is a new module)<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      * Note [The overall promotion story] in DataCon (clarifies existing stuff)<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    The most painful bit was that to generate Typeable instances (ie TyConRepName<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    bindings) for every TyCon is tricky for types in ghc-prim etc:<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      - we need to have enough data types around to *define* a TyCon<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      - many of these types are wired-in<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Also, to minimise the code generated for each data type, I wanted to generate<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    pure data, not CAFs with unpackCString# stuff floating about.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Performance<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    ~~~~~~~~~~~<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Three perf/compiler tests start to allocate quite a bit more. This isn't surprising,<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    because they all allocate zillions of data types, with practically no other code,<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    esp T1969<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">       T1969:  GHC allocates 30% more<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">       T5642:  GHC allocates 14% more<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">       T9872d: GHC allocates  5% more<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    I'm treating this as acceptable.  The payoff comes in Typeable-heavy code.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Remaining to do<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    ~~~~~~~~~~~~~~~<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * I think that "TyCon" and "Module" are over-generic names to use for<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      the runtime type representations used in GHC.Typeable.  Better might<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      be "TrTyCon" and "TrModule".  But I have not yet done this<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * Add more info the the "TyCon" e.g. source location where it was defined<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * Use the new "Module" type to help with Trac #10068<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * It would be possible to generate TyConRepName (ie Typeable instances)<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      selectively rather than all the time.  We'd need to persist the information<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      in interface files.  Lacking a motivating reason I have not done this, but<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      it would not be difficult.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Refactoring<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    ~~~~~~~~~~~<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    As is so often the case, I ended up refactoring more than I intended.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    In particular<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * In TyCon,<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">          - a type *family* (whether type or data)<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">            is repesented by a FamilyTyCon<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">          - a algebraic data type (including data/newtype instances)<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">            is represented by AlgTyCon<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      This wasn't true before; a data family was represented as<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      an AlgTyCon.  There are some corresponding changes in IfaceSyn.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      Also get rid of the (unhelpfully named) tyConParent.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * In TyCon define 'Promoted', isomorphic to Maybe, used when things<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      are optionally promoted; and use it elsewhere in GHC.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * Each TyCon, including promoted TyCons, contains its TyConRepName,<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      if it has one.  This is, in effect, the name of its Typeable<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      instance.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * I added PatSynId, DefMethId, and ReflectionId to the IdInfo.IdDetails<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      type.  They are used for debugging only, namely to suppress excessive<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">      output in -ddump-types.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * Tidy up the generation of PrelInfo.knownKeyNames<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * Move newImplicitBinder from IfaceEnv to BuildTyCl<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * PrelNames.conName renamed to dcQual for consistency with varQual, tcQual<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    * Move mkDefaultMethodIds, mkRecSelBinds from TcTyClsDecls to TcTyDecls<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">commit 021e6f583a1159b0a3581ab1713d560cadc2bdf7<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Author: Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(149, 79, 114); text-decoration: underline; ">simonpj@microsoft.com</a>><o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Date:   Mon Mar 23 14:32:31 2015 +0000<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    tcRnDeclsi can use tcRnSrcDecls<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    I'm not sure why tcRnDeclsi didn't call tcRnSrcDecls before, but now it<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    does.  About 20 lines of code vanish. Hooray.<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">commit 6473d110ab1aa22a5933e405b59e3f597562ce02<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Author: Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(149, 79, 114); text-decoration: underline; ">simonpj@microsoft.com</a>><o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Date:   Fri Mar 20 12:38:42 2015 +0000<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Implement lookupGlobal in TcEnv, and use it<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    This localises the (revolting) initTcForLookup function, exposing<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    instead the more civilised interface for lookupGlobal<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">commit 7078a11f50e3af9139dd5ceef032e89047677833<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Author: Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(149, 79, 114); text-decoration: underline; ">simonpj@microsoft.com</a>><o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Date:   Fri Mar 20 12:36:22 2015 +0000<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   Comments and white space<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">commit 48512df5751a07fd503f0ba523e5504d09ee258d<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Author: Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" style="color: rgb(149, 79, 114); text-decoration: underline; ">simonpj@microsoft.com</a>><o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">Date:   Fri Mar 20 12:27:59 2015 +0000<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; "><o:p> </o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    Improve the error messages for class instance errors<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">   <o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">    See Note [Displaying potential instances].<o:p></o:p></p><p class="Code" style="margin: 6pt 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Courier New'; ">simonpj@cam-05-unx:~/code/HEAD-5$<o:p></o:p></p><p class="MsoNormal" style="margin: 6pt 0cm; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; "> </span></p></div></div></blockquote></div><br></body></html>