Thanks for pointing this out.

]]>The definition for fst is (abbreviated) Lambda.Lambda.lamda. p X Y (lambda. lambda. x). However, when reducing fst A B (pair A B M N), we get (Lambda Z. lambda f : (A -> B -> Z). f M N) A B (lambda x. lambda y. x). So, we are trying to feed two type arguments – A and B – to an expression expecting only one (the overall return type). Shouldn’t our fst definition then be Lambda.Lambda.lamda. p X (lambda. lambda. x), i.e. without that extra mentioning of the type of the second element of the pair? ]]>