that matt bone .com |

const id 1 2

While playing around with the 99 problems in Haskell, I came across this function const that takes two arguments and returns the first without ever evaluating the second. For example:

1
    const 1 2  

returns 1. Now that is straightforward enough, but then I noticed that:

1
    const id 1 2  

returns 2, and, indeed const id x y always returns y. I was confused. id is the identity function and quite simply returns its argument untouched. After some searching and thinking, I realized how this works. If we consider the example above, it turns out that const id 1 discards the 1 and returns the id function. This function(id) is then evaluated with the remaining argument, 2, and, presto, we get 2 as the answer. Tricky, but not exactly readable. A more human friendly form is probably:

1
    flip const 1 2  

A simple description of the flip function is here. Hooray for first class functions and lazy evaluation!