The original ruby definition is 15 tokens, the .to_proc version is 13 tokens.
Orthogonality:
to_proc
3 variables (foo, n, x)
1 method call (to_proc)
1 type of separator (')
2 assignment ops (=, +=)
2 binary operators (->, .)
9 different kinds of tokens, in 5 (arbitrary) categories.
Original:
3 keywords (def, lambda, end)
3 variables (foo, n, i)
5 Separators (|, {, }, (, ))
1 assignment (+=)
12 different kinds of tokens, in 4 categories.
So the only way the original ruby version comes out ahead by these measures is that it has "fewer categories" of token types that are required. Also I think that with the 'def foo' declaration, 'foo' is not technically a variable. I don't really know ruby well enough. But you get the idea.
Well, by definition it's more readable, since nobody is familiar with the new notation yet. But objectively it has problems: unnecessary def and lambda keywords, using () and || for argument lists, using def .. end and {} for scopes. There's room for improvement.
Personally, I like many things from Haskell's syntax. I wish I could say this in Ruby:
Of course, a lot of that is because I'm more familiar with standard Ruby syntax than I am with this hack... but doesn't that tend to prove my point?