Hi David,<br><br><div class="gmail_quote">2011/6/21  <span dir="ltr">&lt;<a href="mailto:dm-list-haskell-prime@scs.stanford.edu">dm-list-haskell-prime@scs.stanford.edu</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

At Tue, 21 Jun 2011 10:01:24 +0200,<br>
<div class="im">José Pedro Magalhães wrote:<br>
&gt;<br>
&gt;     | One thing you could do to help in this specific case would be to use a<br>
&gt;     | different M1 tag--e.g., M1 S ... for selectors and M1 NS ... for<br>
&gt;     | fields without selectors (or K1 NS).  I presume you&#39;ve already<br>
&gt;     | considered this and/or it&#39;s too late to make such a change.  (Or to<br>
&gt;     | move the distinction up to the constructor with two different<br>
&gt;     | constructor tags, CR and CN for record and no-record.)<br>
&gt;<br>
&gt;     I don&#39;t think it&#39;s too late to make a change.  The stuff has only just<br>
&gt;     gone in, so it&#39;s still very malleable.  There may be other considerations,<br>
&gt;     but legacy code isn&#39;t one of them!<br>
&gt;<br>
&gt; I suppose that could be changed, yes, but what exactly are we trying to solve<br>
&gt; here? One can already specify different behavior for constructors with/without<br>
&gt; named fields. Are we trying to avoid OverlappingInstances? Then yes, this<br>
&gt; might help, but I&#39;m not sure this change alone would make all generic<br>
&gt; programming possible without OverlappingInstances.<br>
<br>
</div>Sorry, I wasn&#39;t necessarily advocating the change.  This came out of a<br>
long discussion of UndecidableInstances.  Oleg&#39;s TYPEOF approach is<br>
one way to avoid them (or at least to avoid them in conjunction with<br>
OverlappingInstances).  Before Oleg posted his examples, Simon asked<br>
if it might be possible to use the new Generic class in a similar way.<br>
I was pointing out that no you can&#39;t, though the specific example I<br>
gave could be accommodated by a small change to the Generic interface.<br></blockquote><div><br>Ah, I see. Oleg&#39;s TYPEOF encodes only the type arguments to a datatype, whereas Rep encodes the structure of the datatype. As far as I can tell, TYPEOF never depends on the right-hand side of the datatype. A simple example is some datatype with a phantom type, say `data P a = P`. TYPEOF will encode the `a`, whereas Rep will not.<br>

<br>So now it is very clear to me that you cannot get the TYPEOF if you have the Rep, in general.<br><br><br>Cheers,<br>Pedro<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


<font color="#888888"><br>
David<br>
</font></blockquote></div><br>