IORefについて質問です。
do ioref <- newIORef 0
 modifyIORef ioref (+1)
 readIORef ioref >>= print

という式の中でmodifyIORef ioref (+1)がiorefの値を変更している仕組みが
どうしてもわかりません。予想としては
・modifyIORefを使うと引数の値を変更できると言語の根っこの部分で決められている
という事かなと思っているんですが、この考えでいいんでしょうか?