I have this Haskell code that triples input value.
triple :: Int -> Int
triple = do
n <- id
d <- (n+)
(d+)
How does this code work? With an example triple 10, how the argument 10 is mapped/assigned to id, n and d to get the return value of 30?
My understandig is as follows:
We can decompose triple function with two subfunctions tripleA and tripleB as follows:
triple :: Int -> Int
triple = tripleA >>= (\d -> tripleB d)
tripleA :: Int -> Int
tripleA = id >>= (\n -> (n+))
tripleB :: Int -> Int -> Int
tripleB d = (d+)
Now we can see that the function tripleA gets an input, assign it to id function to return the value itself, and map it to the function (\n -> (n+)) to return (10+) 10.
Likewise, tripleB also makes (20+) 20, so I expect the results as 40, but the correct answer is 30.
What is wrong with my interpretation?