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)
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With