You&#39;re right. I do that sometimes, but I must make a habit of &quot;hoogling&quot;.<br><br><div class="gmail_quote">2009/11/19 <a href="mailto:yairchu@gmail.com">yairchu@gmail.com</a> <span dir="ltr">&lt;<a href="mailto:yairchu@gmail.com">yairchu@gmail.com</a>&gt;</span><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">&gt; This is what happens all the time, the thing I am trying to implement is<br>

already in the library!<br>
<br>
</div>You can easily find those library functions using Hoogle.<br>
In this case Hoogle gives the &quot;sequence&quot; function as its second result<br>
for the query &quot;[[a]] -&gt; [[a]]&quot;:<br>
<br>
Data.List transpose :: [[a]] -&gt; [[a]]<br>
Prelude sequence :: Monad m =&gt; [m a] -&gt; m [a]<br>
<br>
See: <a href="http://haskell.org/hoogle/?hoogle=%5B%5Ba%5D%5D+-%3E+%5B%5Ba%5D%5D" target="_blank">http://haskell.org/hoogle/?hoogle=%5B%5Ba%5D%5D+-%3E+%5B%5Ba%5D%5D</a><br>
<div class="im"><br>
On Nov 19, 3:58 pm, Ozgur Akgun &lt;<a href="mailto:ozgurak...@gmail.com">ozgurak...@gmail.com</a>&gt; wrote:<br>
&gt; Thanks for the both quick answers.<br>
&gt;<br>
&gt; This is what happens all the time, the thing I am trying to implement is<br>
&gt; already in the library!<br>
&gt;<br>
&gt; Neil,<br>
&gt; I clearly understood the way you implemented. Actually I had a similar<br>
&gt; implementation with some problems, one of which is the base-case you<br>
&gt; mentioned.<br>
&gt;<br>
&gt; Eugene,<br>
&gt; I&#39;ll definitely have a look at the implementation of sequence.<br>
&gt;<br>
&gt; Cheers!<br>
&gt;<br>
</div>&gt; 2009/11/19 Neil Brown &lt;<a href="mailto:nc...@kent.ac.uk">nc...@kent.ac.uk</a>&gt;<br>
<div class="im">&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; &gt; Ozgur Akgun wrote:<br>
&gt;<br>
&gt; &gt;&gt; Anyway, just forget the fact that these funstions do not do a check on the<br>
&gt; &gt;&gt; length of the input list for a moment. My question is, how can I generalize<br>
&gt; &gt;&gt; this function to accept a list of lists of arbitrary length, and produce the<br>
&gt; &gt;&gt; required result.<br>
&gt;<br>
&gt; &gt; Hi,<br>
&gt;<br>
&gt; &gt; The concise solution is the list monad, as already posted.  If that<br>
&gt; &gt; confuses you, here is a version using list comprehensions (well, mostly):<br>
&gt;<br>
&gt; &gt; allPossibilities :: [[a]] -&gt; [[a]]<br>
&gt; &gt; allPossibilities [] = [[]]<br>
&gt; &gt; allPossibilities (l:ls) = [ x : xs | x &lt;- l, xs &lt;- allPossibilities ls]<br>
&gt;<br>
&gt; &gt; The second line prefixes all possibilities from the later lists with every<br>
&gt; &gt; element from the the first list.  Note that the base-case is crucial; if it<br>
&gt; &gt; is the empty list [], that &quot;xs &lt;- allPossibilities ls&quot; will not find any<br>
&gt; &gt; elements, and thus the list comprehension becomes the empty list, and the<br>
&gt; &gt; whole thing falls apart.  Thus the base case must be the list containing the<br>
&gt; &gt; empty list, so that you have one possibility arising at the end upon which<br>
&gt; &gt; to prefix the items.  Hope that makes sense...<br>
&gt;<br>
&gt; &gt; Thanks,<br>
&gt;<br>
&gt; &gt; Neil.<br>
&gt;<br>
&gt; --<br>
&gt; Ozgur Akgun<br>
&gt;<br>
</div>&gt; _______________________________________________<br>
&gt; Haskell-Cafe mailing list<br>
&gt; Haskell-C...@haskell.orghttp://<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<div><div></div><div class="h5">_______________________________________________<br>
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><br clear="all"><br>-- <br>Ozgur Akgun<br>