<div dir="ltr">I need to add that it&#39;s perfectly valid to define all operation in terms of Folds and so it&#39;s possible to define take, head, and such functions for all<br>Foldable instances as they have a path to fold over them:<br>
<br>the key idea is to store a state while folding over a structure:<br><br>headF :: (Foldable x) =&gt; x a -&gt; a<br>headF = snd . F.foldl (\(s,v) n -&gt; if s then (s,v) else (True,n)) (False, error &quot;empty&quot;)<br>
<br>takeF :: (Foldable x) =&gt; Int -&gt; x a -&gt; [a]<br>takeF c = reverse . snd . F.foldl (\(i,v) n -&gt; if i &lt; c then (i+1,n:v) else (i,v)) (0,[])<br><br>In domain of a lazy languages we will even stop evaluation as soon as we will get result without additional steps.<br>
<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 31 May 2013 18:31, Brandon Allbery <span dir="ltr">&lt;<a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@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 dir="ltr"><div class="im">On Fri, May 31, 2013 at 6:16 AM, mukesh tiwari <span dir="ltr">&lt;<a href="mailto:mukeshtiwari.iiitm@gmail.com" target="_blank">mukeshtiwari.iiitm@gmail.com</a>&gt;</span> wrote:<br>
</div><div class="gmail_extra">
<div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Data.List can be abstracted using Foldable and Traversable but unfortunately I could not find the functions corresponding to head, take.<br>

</div></div></div></blockquote><div><br></div></div><div>Those are, again, more general than you want. What is the `head` of a HashMap? (Consider that an implementation may choose to randomize the hash function to avoid hash collision attacks.) Foldable and Traversable express the concept of a collection which has no meaningful concept of an element&#39;s relative position within the collection. ListLike adds the concept of position, thereby admitting an indexing operation (and, by extension, `head` which is index 0).</div>
<span class="HOEnZb"><font color="#888888">
<div><br></div></font></span></div><span class="HOEnZb"><font color="#888888">-- <br><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div>

<div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div>
</font></span></div></div>
<br>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Alexander<br>
</div>