<br><br><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Alfredo Di Napoli</b> <span dir="ltr">&lt;<a href="mailto:alfredo.dinapoli@gmail.com" target="_blank">alfredo.dinapoli@gmail.com</a>&gt;</span><br>

Date: 23 October 2012 10:35<br>Subject: Re: [Haskell-cafe] A clarification about what happens under the hood with foldMap<br>To: Chadda├» Fouch├ę &lt;<a href="mailto:chaddai.fouche@gmail.com" target="_blank">chaddai.fouche@gmail.com</a>&gt;<br>

<br><br>I&#39;m sure I&#39;m missing a point, but the &quot;minimum&quot; definition for a Foldable instance is given in terms of foldMap, so I get the cake for free, foldr included, right?<div>In the example I have defined my treeSum as:</div>

<div>
<div><br></div><div><span style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">treeSum = Data.Foldable.foldr (+) 0</span></div><div><font color="#222222" face="arial, sans-serif"><br>
</font></div></div><div><font color="#222222" face="arial, sans-serif">So the only thing Haskell knows it that I want to fold over a Foldable for which foldMap (and therefore foldr) is defined, and specifically I want to fold using (+) as function.</font></div>


<div><font color="#222222" face="arial, sans-serif">But foldMap is defined in terms of f, which in this case is Sum, because I want to sum things. It it were (*) f would have been Product, right?</font></div><div><font color="#222222" face="arial, sans-serif"><br>


</font></div><div><font color="#222222" face="arial, sans-serif">So what I&#39;m missing is the relation between foldMap and foldr, aka &quot;How Haskell infer from (+) that I want f = Sum and not something different&quot;?</font></div>


<div><font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" face="arial, sans-serif">I hope to have been clearer, don&#39;t know if I&#39;m missing something crucial, though :)</font></div>


<div><font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" face="arial, sans-serif">Thanks,</font></div><div><font color="#222222" face="arial, sans-serif">A.</font></div>
</div><br>