圏論を勉強する必要ないのはそのとおりだけど、
型クラスとしてのアプリカティヴやモナドの挙動は理解しないと
いずれにせよ現状のHaskellでIOはまともに扱えないだろ。

裏で状態を受渡してるのを隠蔽するという
よくあるタイプのモナドの使い方のひとつ
(そしてそれは一意型ほどclumsyでない)、
という事情はむしろ強調してしかるべき。