
10 Jun
2015
10 Jun
'15
3 p.m.
This is a common source of confusion. A value of type IO a for some a is not an impure function because it is not a function. Its evaluation is completely pure and referentially transparent: every time you evaluate `getLine`, you get the same IO String value. The only observable difference is under execution, but we don't expect execution to be pure: we only expect evaluation to be pure.
Yeah, this is what I was trying to say in the latter part of my post, but I guess I ended up confusing the matter more :( Best regards, Marcin Mrotek