乱数? IO?

1〜6までの数をランダムで返す関数 dice を作ろうとしたが頓挫。
作ろうとした dice の型は次の通り。

dice :: Int

Haskell で乱数を扱うにはどうすればよいかと調べていたところ、次のようにすればよいらしい。

getStdRandom $ randomR (1, 6)

getStdRandom の型は何かというと IO a

GHCi> :t getStdRandom
getStdRandom :: (StdGen -> (a, StdGen)) -> IO a

これは当初考えていた dice の型とは異なる。なので、IO a から IO をはずすして a を返す方法を探してみたけれども見つからなかった。
見つかったのは

unsafe :: IO a -> a

という関数はないということ (http://www.haskell.org/haskellwiki/Introduction_to_IO)。理由は「これを許してしまうとHaskellの参照透過性が侵されてしまう」ということ。おっしゃるとーりで。
なので、当初考えていた型が間違いで正しくは、こう?

dice :: IO Int

dice を使って何かをするときは必ず IO が付いてまわるのか。