diff --git a/Data/Array/Base.hs b/Data/Array/Base.hs
index 6aa1a4f5d96a65ac1d1dc389489075899f0375c8..b3916a4faca4a42325e7174b2f99ef18aa5c6267 100644
--- a/Data/Array/Base.hs
+++ b/Data/Array/Base.hs
@@ -1115,6 +1115,10 @@ data STUArray s i a = STUArray !i !i !Int !(MutableByteArray s)
 
 INSTANCE_TYPEABLE3(STUArray,stUArrayTc,"STUArray")
 
+instance Eq (STUArray s i e) where
+    STUArray _ _ _ arr1# == STUArray _ _ _ arr2# =
+        sameMutableByteArray# arr1# arr2#
+
 #ifdef __GLASGOW_HASKELL__
 {-# INLINE unsafeNewArraySTUArray_ #-}
 unsafeNewArraySTUArray_ :: Ix i
diff --git a/Data/Array/IO/Internals.hs b/Data/Array/IO/Internals.hs
index 0b79b0769a55d479bf012f1064634a39ac01471f..1827ea74a9069341978327694ed6d93da1b896ad 100644
--- a/Data/Array/IO/Internals.hs
+++ b/Data/Array/IO/Internals.hs
@@ -77,6 +77,9 @@ newtype IOUArray i e = IOUArray (STUArray RealWorld i e)
 
 INSTANCE_TYPEABLE2(IOUArray,iOUArrayTc,"IOUArray")
 
+instance Eq (IOUArray i e) where
+    IOUArray s1 == IOUArray s2  =  s1 == s2
+
 instance MArray IOUArray Bool IO where
     {-# INLINE getBounds #-}
     getBounds (IOUArray arr) = stToIO $ getBounds arr