<div dir="ltr"><br><br><div class="gmail_quote">On Tue, Jul 29, 2008 at 9:51 AM,  <span dir="ltr">&lt;<a href="mailto:oleg@okmij.org">oleg@okmij.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Hello!<br>
<br>
Claus wrote:<br>
&gt; Perhaps we can combine our versions to get the best of both?<br>
<br>
I have done so. I have committed a new version of<br>
 &nbsp; &nbsp; &nbsp; &nbsp;/comparison/SYB1_2/GMap.lhs<br>
with gmap2 of the type<br>
<br>
&gt; gmap2 :: forall a b c . (Data a, Data b,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Data (c a), Data (c b), Data (c X)) =&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(a -&gt; b) -&gt; c a -&gt; c b<br>
<br>
The compositionality tests seem to pass. There are no unsafe<br>
operations or any unsafe extensions. Only standard Data.Typeable and<br>
Generics.Data operations are being used. The code also contains an<br>
optimization: if it is determined that a structured value has no<br>
components to map, no traversal is performed and the value is returned<br>
as it is. That should speed things up a little. The trick is producing<br>
something out of nothing.</blockquote><div><br>That&#39;s a clever combination of both techniques. You are passing around an explicit type representation at run-time, to ensure that the transforming function applies only to X-positions. Also you don&#39;t pretend that there are X-values in there (as Claus&#39; version did) so there is no need for unsafeCoerce.<br>
<br>One question: the runtime checks in traverse are for internal consistency only, right?. I could not think of runtime errors arising from gmap2-calls. Furthermore, I think the issue of unfold errors is solved, right? (Although these properties are not known by the type system.)<br>
&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Too bad that the deadline to amend a Haskell workshop paper<br>
has passed, and so has the deadline for the generics workshop. Perhaps<br>
we should write a separate paper?</blockquote><div><br>Yes, that&#39;s a pity. I will mention this in the presentation though (and update the technical report, which admittedly is rather delayed).<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;I&#39;m afraid I would be out of town again for two weeks and so<br>
would not be able to follow the discussion closely.<br>
<br>
</blockquote><div><br>Cheers,<br><br>Alexey <br></div></div></div>