## martedì 8 dicembre 2009

### Dollar $operator in Haskell Do you know what is$ operator in Haskell?
$means simply , 'apply the left function at the right value'. f$ x := f x

it seems really trivial, isn't it ?
But, for example in this kind of situation, is really usefull:

zipWith ( $) ( cycle [ \x -> div (x + 1) 2 , \x -> div x 2 ] ) [1..] here you have a infinite list of function: a = cycle [ \x -> div (x + 1) 2 , \x -> div x 2 ] ( ie: [\x -> div (x + 1) 2 , \x -> div x 2 , \x -> div (x + 1) 2 , \x -> div x 2, ... ] ) and you want to apply every element of the list at the element at the same index in the second list: b = [1..] zipWith, for every index i takes the element a(i) of the left list and b(i) of the right list and execute what is requested inside the parentheses. In this situation is specified$ so:

a(i) \$ b(i ) := a(i) ( b(i) )

the result must be the following:

[ 1 ,1 , 2, 2 , 3 ,3 ... and so on.