<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">That's certainly better than mine, but I'm lost again, with the following. What seemed like a simple improvement doesn't compile.<br><br>Michael<br><br>===============<br><br>This works.<br><br><span style="font-family: courier,monaco,monospace,sans-serif;">area :: [(Double,Double)] -&gt; Double</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">area ps = abs $ (/2) $ area' (last ps) ps</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where area' _ [] = 0</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family:
 courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; area' (x0,y0) ((x,y):ps) = (x0-x)*(y0+y) + area' (x,y) ps</span><br style="font-family: courier,monaco,monospace,sans-serif;"><br style="font-family: courier,monaco,monospace,sans-serif;"><br><br>*Main&gt; let p = [(0.0,0.0),(1.0,0.0),(1.0,1.0),(0.0,1.0),(0.0,0.0)]<br>*Main&gt; area (last p) p<br>1.0<br>*Main&gt; <br><br><br>===============<br><br>This doesn't.<br><br><span style="font-family: courier,monaco,monospace,sans-serif;">area :: [(Double,Double)] -&gt; Double</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">area p = abs $ (/2) $ area' (last p):p</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 where area' [] = 0</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; area' ((x0,y0),(x,y):ps) = ((x0-x)*(y0+y)) + area' (x,y):ps&nbsp;&nbsp; </span><br style="font-family: courier,monaco,monospace,sans-serif;"><br><br>--- On <b>Sun, 11/8/09, Chaddaï Fouché <i>&lt;chaddai.fouche@gmail.com&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Chaddaï Fouché &lt;chaddai.fouche@gmail.com&gt;<br>Subject: Re: [Haskell-cafe] Area from [(x,y)] using foldl<br>To: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Cc: "Eugene Kirpichov" &lt;ekirpichov@gmail.com&gt;, haskell-cafe@haskell.org<br>Date: Sunday, November 8, 2009, 3:52 PM<br><br><div id="yiv140782299"><div class="gmail_quote">On Sun, Nov 8, 2009 at 9:04 PM, michael
 rice <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:nowgate@yahoo.com" target="_blank" href="/mc/compose?to=nowgate@yahoo.com">nowgate@yahoo.com</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;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">
Of course! Back to the drawing board.<br><br></td></tr></tbody></table></blockquote></div><br>If I understand the problem correctly, I'm not convinced that foldl is the right approach (nevermind that foldl is almost never what you want, foldl' and foldr being the correct choice almost always). My proposition would be the following :<br>
<br>&gt; area ps = abs . (/2) . sum $ zipWith (\(x,y) (x',y') -&gt; (x - x') * (y + y')) ps (tail $ cycle ps)<br><br>I think it express the algorithm more clearly.<br><br>-- <br>Jedaï<br>
</div></blockquote></td></tr></table><br>