Hi,<br><br><div class="gmail_quote">2011/6/21 Simon Peyton-Jones <span dir="ltr">&lt;<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div>| One thing you could do to help in this specific case would be to use a<br>
| different M1 tag--e.g., M1 S ... for selectors and M1 NS ... for<br>
| fields without selectors (or K1 NS).  I presume you&#39;ve already<br>
| considered this and/or it&#39;s too late to make such a change.  (Or to<br>
| move the distinction up to the constructor with two different<br>
| constructor tags, CR and CN for record and no-record.)<br>
<br>
</div>I don&#39;t think it&#39;s too late to make a change.  The stuff has only just gone in, so it&#39;s still very malleable.  There may be other considerations, but legacy code isn&#39;t one of them!<br></blockquote><div>


<br>I suppose that could be changed, yes, but what exactly are we trying to solve here? One can already specify different behavior for constructors with/without named fields. Are we trying to avoid OverlappingInstances? Then yes, this might help, but I&#39;m not sure this change alone would make all generic programming possible without OverlappingInstances.<br>

<br>(Also, I always thought UndecidableInstances were &quot;more evil&quot;, in some sense, and this change does nothing to remove the use of UndecidableInstances for generic programming.)<br><br><br>Cheers,<br>Pedro<br>
<br>
</div></div><br>