IO がモナドで表現されるようになった経緯は、
「A History of Haskell」の Section 7 に詳しく書かれている

http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/