# [Haskell-cafe] Composition and type magic

Stere0id stereoid at zankapfel.org
Tue Feb 24 08:15:13 UTC 2015

```On 24.02.2015 06:57, Sumit Sahrawat, Maths & Computing, IIT (BHU) wrote:
> Thanks.
> You've given me a good exercise in equational reasoning.
>
> I'm studying such things because I might start studying combinatory logic
> (Smullyan's mockingbird book) soon.
> It's a good exercise for the mind, and is very enjoyable with pencil &
> paper.
> Can you give me some more patterns like transducers (foldl foldl) and the
> dot-dot-dot ( boobies, in your words :) ) example?
>
> Thanks once again.
>
> On 24 February 2015 at 08:57, Michael Orlitzky <michael at orlitzky.com> wrote:
>
>> On 02/23/2015 10:11 PM, Sumit Sahrawat, Maths & Computing, IIT (BHU) wrote:
>>> Hi everyone,
>>>
>>> I defined a function for discrete convolution, i.e
>>>
>>>     conv xs = sum . zipWith (*) xs . reverse
>>>
>>> And I was wondering, can it be done without explicitly passing in the xs
>>> (eta-reduction)?
>>
>> Ehhhhhhhhhh this will work:
>>
>>   conv = (sum .) . (. reverse) . zipWith (*)
>>
>> But it's so much easier to understand without all the boobies operators:
>>
>>   conv xs ys = sum \$ zipWith (*) xs (reverse ys)
>>
>> _______________________________________________
>>
> _______________________________________________
>

You might be interested in the pointfree [1] tool, which can convert
lambda expressions to pointfree versions automatically. Allthough I also
find the more complex ones, as in this case, rather obscure.

I like you initial version best:

conv xs = sum . zipWith (*) xs . reverse

```