
Mirko Rahn wrote:
More important: Correct me, if I'm wrong, but as far as I understand java, it is still impossible in your solution to evaluate the equivalent of
head $ mirror $ rel [ (i,i) | i <- [0..] ]
in finite time, that is, your MirrorRel is not lazy in the elements. You have to build this also by hand and your code becomes even longer and more complex.
Yes, that's true. Java is strict, and each bit of laziness has to be introduced by hand. Just as Haskell is lazy, and each bit of strictness has to be introduced by hand. It's not clear for a non-Haskell-programmer that the haskell aproach is better, and i don't think that it becomes clear by showing a single program wich uses laziness.
(Java developers who don't understand Java's advanced features like generics and anonymous classes may not be able to write or understand the above written Java solution; but do you expect them to understand Haskell?)
Add 1: This statement contradicts your "easyness" claim!?
I don't think so. I was able to write a short (modulo syntactical overhad of the Java language) and modular Java solution without consulting reference manuals, drawing diagrams or something.
Add 2: In contrast, the Haskell solution does'nt uses "advanced Haskell features" (whatever this might be), it consists of 6 lines of plain Haskell 98 only.
The Haskell solution has no need for "advanced Haskell features" because Haskell is an advanced programming language. This can be good (no need to implement advanced features yourself) or bad (fear of what the advanced features do with your simple-looking code). Tillmann