<div class="gmail_quote">On Fri, Oct 30, 2009 at 5:59 PM, Luke Palmer <span dir="ltr">&lt;<a href="mailto:lrpalmer@gmail.com">lrpalmer@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Fri, Oct 30, 2009 at 10:39 AM, Tom Davie &lt;<a href="mailto:tom.davie@gmail.com">tom.davie@gmail.com</a>&gt; wrote:<br>
&gt; Of note, there is a sensible monad instance for zip lists which I *think*<br>
&gt; agrees with the Applicative one, I don&#39;t know why they&#39;re not monads:<br>
&gt; instance Monad (ZipList a) where<br>
&gt;   return = Ziplist . return<br>
&gt;   join (ZipList []) = ZipList []<br>
&gt;   join (ZipList (a:as)) = zlHead a `zlCons` join (map zlTail as)<br>
<br>
</div>IIRC, that doesn&#39;t satisfy the associativity law, particularly when<br>
you are joining a list of lists of different lengths.  2 minutes of<br>
experimenting failed to find me the counterexample though.<br>
</blockquote></div><br><div>Cool, thanks Luke, that explains why this is available in Stream, but not in ZipList too.</div><div><br></div><div>Bob</div>