まずモナドとIOモナドを区別してくれ
純粋さを保ったまま入出力をする仕組みがHaskellにはあって、IOという名前の型が使われる
モナドというのはある種の型を抽象的に扱う枠組み
(どういう型をどうやって扱うのかは一言では説明できない)
で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる)

で、モナドが知りたいの?IOが知りたいの?