>>458-459
Worldという、コンピュータの全状態を表す型があるとする。
もちろんこの型のオブジェクトは1つしか存在しない。
IO tは「Worldを受け取り、状態を変化させたWorldを返すコマンド」型。

例えば
putChar :: Char -> IO ()
は、「Charを与えると、IOコマンドが返ってくる」関数。
返ってきたコマンドにWorldを与えると、状態が変化したWorldが返る。

main = do
    putChar 'a'
    putChar 'b'
とすると、mainはIO ()型になる。
システムがこれにWorld型の引数を与えて呼び出す。

ミソは、このインターフェースだとWorld型のデータに直接さわれないこと。
なので、「状態が変化する前のWorld」と「変化したあとのWorld」が
同時に存在して困る、などということが起きない。