>>59
By learning the untyped lambda calculus, you'll realize why haskell sucks. It's safe, but it's weak.
>>60
I don't doubt that you can define your own
data type for that example. Although, to match the recursive type exactly, it would be
data Tuple a b = Tuple (Tuple a b) b. The type can't include NIL, as there no case to handle that in the original code. But the issue I have is that this isn't done in type inference. It's a hole in the feature. With this example, you have no choice but to define your own datatype. Some people would say that is more self-documenting, but then at that point you may as well throw out type inference all together and force type declarations everywhere.
And then with self application you aren't so lucky. Although maybe there is a work around for that as well.