I guess it's explained elsewhere here aswell, but the "lazy IO" discussed is pretty much a bug: you read a file to String, but this String is loaded from the lazily while you consume it. But the problem is: you already get the String thinking all is well, but if something happens to the file handle you get a runtime error. This shouldn't happen with pure values.