The argument that I/O actions are themselves pure is interesting, and makes sense. When thinking about
IO as a series of instructions, it is true that the series of instructions used by the program each time will be the same.
I'm also pretty fond of the idea that Haskell is great at sequencing and composing these series of instructions.
Instructions as a data structure - very cool idea. Very nicely written.