
And this is confusing to those of us who are not compiler experts.
Haskell knows when I have a list of Doubles, you know, because it's strongly typed.
Then it proceeds to box them. Huh ?
The laziness thing has many example od _reducing_ efficiency, but there seems to be a real lack of example where it helps. In fact it seems to _always_ hurt. People sure seem excited about it. Me, not so excited.
I have a program that involves a somewhat involved "compilation" pipeline. As a result of laziness, it's all done incrementally and I can start getting results right away, which is essential to my application. Without laziness I'd have to do something awkward and complicated like break it into a lot of message passing threads or process in chunks (and it's impossible to know how much context each chunk will need without further hackery). I can abort the computation cleanly by simply stopping the consumer, and everything gets GCed. And I get all sorts of convenient idioms like 'zip [0..]' and calculating stuff in 'where' that I may not need. And it's just fun. So I'm still excited about it :)