Hacker News new | ask | show | jobs
by pron 4607 days ago
Isn't the side effect returned as an IO type which is later evaluated by the runtime? (I'm talking about Haskell)
1 comments

Yes, but you can create the thing of type `IO a` strictly.
Yes, but when are they executed? When is the byte written to the file?
Well, you certainly can't start executing until the `IO a` thing has been evaluated, but there aren't any other constraints.

Something that can confuse people (and I'm not sure if this is the case with you or not) is that an `IO a` may/probably will contain a closure. So evaluation and execution are interleaved, but not because of laziness.

Closures can be a way of implementing laziness, so I'm not sure you've shown it's "not because of laziness" - though certainly it's not because the language is lazy by default.
You can picture functions with the IO type as something to compose a program out of. This program is then run by runtime system of your implementation, and that's "when the byte is written".

Here's a nice explanation of Haskell IO: http://stackoverflow.com/questions/13536761/what-other-ways-...