Fiquei surpreso que o JavaScript converte todos os elementos do array em string antes de compará-los. Isso dá resultados inesperados em alguns casos.
coffee> [1,3] > [1,2]
true
coffee> [1,10] > [1,2]
false # '10' < '2'
Com a seguinte adição ao protótipo Array:
Array::greaterThan = (otherArray) ->
for element, index in @ when element isnt otherArray[index]
return element > otherArray[index]
false # @ == otherArray
Agora se comporta como eu esperava.
coffee> [1,10].greaterThan [1,2]
true