On Thu, Jul 28, 2005 at 08:01:17PM +0200, Diego y tal wrote:
I understand that this is caused by the lazyness,
No, it is caused by mixing laziness with side-effects, which happens when you use getContents/readFile.
that doesn't evaluate the expression "x <- readFile fEntrada" until it's necessary,
"x <- readFile fEntrada" is not an expression.
but.. is it normal that we have to think about this "problem" when programming?
You just have to know, which functions mix laziness and side-effects by using unsafeInterleaveIO (readFile, getContents, hGetContents).
I find this a great disadvantage as oppose of the imperative paradigm,
I wouldn't say this is a great disadvantage of Haskell, because: a) the imperative paradigm is available in Haskell b) readFile is a bit of hack, because it uses laziness where the order of execution matters (it uses unsafeInterleaveIO). It is generally known that readFile should be used only for the simplest I/O tasks. c) there are other ways to complete the task (however, some of them are non-standard) Best regards Tomasz