When I'm writing code in the form of IO Monad, I wonder what's real value of it.For example I have a function as
def something(in: In): IO[Out]; my function is a
pure function that **returns an impure recepie(just another function) which could be composed with other receipes, and finally triggered.
Is postponing the side-effects the best I get? In other words, what's the difference in the value between a function with side-effects, and a pure function which return an impure function? In my eyes both approches could be testable, trackable, debugable (the IO version could be harder, as stacktraces are not as helpful as simple stack-calls).