Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to understand an expression where the (.) operator is used as an argument?

Tags:

haskell

I'm new to Haskell and even though I've done the basic, I still don't understand why the following result gives 4:

d f x = f x x
main = print ((d (.)) (d (+)) 1)

1 Answers

d (.) will result in a function \x -> (.) x x which takes as input x a function and will thus take a variable y and applies x two times, so \x y -> x (x y).

The d (+) expression. d (+) is again a function that looks like \z -> (+) z z, or less verbose \z -> z + z, this is thus a function that takes as input a number z, and will return z + z.

We use this function \z -> z + z as variable x in the \x y -> x (x y) expression, so d (.) (d (+)) is equivalent to \y -> (\z -> z + z) ((\z -> z + z) y).

Finally we use that function with 1 as parameter, the result is thus (\z -> z + z) ((\z -> z + z) 1) which is equivalent to:

  (\z -> z + z) ((\z -> z + z) 1)
→ (\z -> z + z) (1 + 1)
→ (\z -> z + z) 2
→ (2 + 2)
→ 4
like image 128
Willem Van Onsem Avatar answered Dec 16 '25 02:12

Willem Van Onsem