Or you could use curry and uncurry: <br><br><span style="font-family: courier new,monospace;">sumProducts = curry $ sum . uncurry (zipWith (*))</span><br><br><div class="gmail_quote">On 5 June 2011 17:40, Daniel Fischer <span dir="ltr">&lt;<a href="mailto:daniel.is.fischer@googlemail.com">daniel.is.fischer@googlemail.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 Sonntag, 5. Juni 2011, 17:09, Alexander Shendi wrote:<br>
&gt; Hi folks,<br>
&gt;<br>
&gt; I am working my way through &quot;Learn You a Haskell for Great Good&quot; and<br>
&gt; have reached page 84, where the book recommends that you define your<br>
&gt; functions in a &quot;points-free style&quot;, using the &quot;.&quot; and &quot;$&quot; operators.<br>
&gt;<br>
&gt; Now I have:<br>
&gt;<br>
&gt; sumProducts&#39; :: Num a =&gt; [a] -&gt; [a] -&gt; a<br>
&gt; sumProducts&#39; x y = sum (zipWith (*) x y)<br>
&gt;<br>
&gt; I would like to eliminate the &quot;x&quot; and the &quot;y&quot; in the definition, but all<br>
&gt; I have managed to contrive is:<br>
&gt;<br>
&gt; sumProducts :: Num a =&gt; [a] -&gt; [a] -&gt; a<br>
&gt; sumProducts x = sum . zipWith (*) x<br>
&gt;<br>
&gt; How do I proceed from here? Any advice is welcome :)<br>
&gt;<br>
&gt; Many thanks in advance,<br>
&gt;<br>
&gt; /Alexander<br>
<br>
</div>First, (mentally) insert parentheses:<br>
<br>
sumProducts x = sum . (zipWith (*) x)<br>
<br>
Now, write the composition as a prefix application of (.),<br>
<br>
sumProducts x = (.) sum (zipWith (*) x)<br>
= ((.) sum) (zipWith (*) x)<br>
<br>
which has the form f (g x), with f = (.) sum and g = zipWith (*), so it&#39;s<br>
<br>
(f . g) x, which expands to<br>
<br>
(((.) sum) . (zipWith (*))) x<br>
<br>
and now the argument can easily be dropped, giving<br>
<br>
sumProducts = ((.) sum) . (zipWith (*))<br>
<br>
now to make it look a little nicer, we can remove unnecessary parentheses<br>
and write (.) sum as a section,<br>
<br>
sumProducts = (sum .) . zipWith (*)<br>
<br>
Generally, pointfreeing goes<br>
<br>
f (g x) ~&gt; f . g<br>
f (g x y) ~&gt; (f .) . g<br>
f (g x y z) ~&gt; ((f .) .) . g<br>
<br>
Play with it and get a little experience, but don&#39;t overuse it.<br>
Nobody really wants to come across a pointfree version of<br>
<br>
\a b c d e f g h -&gt; foo (bar a b) (baz c d e) f (quux g h)<br>
<br>
(and that&#39;s not even repeating or flipping arguments)<br>
<div><div></div><div class="h5"><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>
</div></div></blockquote></div><br>