http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.3.0.0/src/GHC-IOArray.html#IOArray によれば

newtype IOArray i e = IOArray (STArray RealWorld i e)
instance Eq (IOArray i e) where
IOArray x == IOArray y = x == y

で、http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.3.0.0/src/GHC-Arr.html#STArray によれば

-- Just pointer equality on mutable arrays:
instance Eq (STArray s i e) where
STArray _ _ _ arr1# == STArray _ _ _ arr2# =
sameMutableArray# arr1# arr2#

なので、 IOArray や STArray を使っているかぎり、(==)は要素の比較のみしてくれるはず。

モナディックにするのがいやなら、配列を生成/変更するときにハッシュ値でも計算してそれを比較するようにするとか。