In a lot of cases though annotating all the recursive aspects with newtypes is a _royal_ pain, and is even worse if you want the datatypes to be instances of common type classes like Functor, Applicative, etc... (try it sometime) <br>
I don&#39;t advocate allowing infinite types wholesale, just in specific cases with a special annotation (like a type signature specifying the allowed infinite type). I think this would be the best of both worlds.<br><br>
- Job<br><br><br><div class="gmail_quote">On Tue, Aug 4, 2009 at 4:23 AM, Heinrich Apfelmus <span dir="ltr">&lt;<a href="mailto:apfelmus@quantentunnel.de">apfelmus@quantentunnel.de</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;">
<div class="im">Job Vranish wrote:<br>
&gt;<br>
&gt; I think that in an ideal world haskell would have some way of allowing<br>
&gt; infinite types if you asked for them explicitly (say in the type signature<br>
&gt; somehow) and then just automatically wrap/unwrap everything with newtypes<br>
&gt; behind the scenes (well maybe in an ideal world it wouldn&#39;t have to do this<br>
&gt; either). This wouldn&#39;t change the underlying semantics, but would get rid of<br>
&gt; alot of messyness.<br>
&gt;<br>
&gt; Infinite types are possible, My toy language infers infinite types just fine<br>
&gt; :) and I think Ocaml has an option for them, but niether of those have type<br>
&gt; classes so I&#39;m not sure how compatable the idea is with haskell in general.<br>
<br>
</div>There was a thread with a compelling reason against vanilla infinite<br>
types some time ago:<br>
<br>
    <a href="http://thread.gmane.org/gmane.comp.lang.haskell.cafe/17103" target="_blank">http://thread.gmane.org/gmane.comp.lang.haskell.cafe/17103</a><br>
<br>
<br>
Of course, you can have all the recursion you want by using  newtype ,<br>
it&#39;s just that you need to annotate them with the extraneous<br>
constructor. In fact, that&#39;s exactly the purpose of the constructor;<br>
think of it as an aid for the type checker.<br>
<div class="im"><br>
<br>
Regards,<br>
apfelmus<br>
<br>
--<br>
<a href="http://apfelmus.nfshost.com" target="_blank">http://apfelmus.nfshost.com</a><br>
<br>
_______________________________________________<br>
</div><div><div></div><div class="h5">Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br>