関数型初心者です。

今、SICPを少しずつ読んでるのですが、set!のようなものをHaskellがモナド化するのは
単に純粋であることに拘るからでしょうか。IORefみたいなものがset!に当たるかと思います
が、副作用アリだぞ、ということを意識させる以上のメリットとかがよく分かりません。