+{-# INLINE unsafeReadFunPtr #-}
+unsafeReadFunPtr :: StorableArray ix (FunPtr a) -> Int -> IO (FunPtr a)
+unsafeReadFunPtr (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readAddrArray# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, FunPtr e# #) }
+
+{-# INLINE unsafeReadFloat #-}
+unsafeReadFloat :: StorableArray ix Float -> Int -> IO Float
+unsafeReadFloat (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readFloatArray# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, F# e# #) }
+
+{-# INLINE unsafeReadDouble #-}
+unsafeReadDouble :: StorableArray ix Double -> Int -> IO Double
+unsafeReadDouble (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readDoubleArray# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, D# e# #) }
+
+{-# INLINE unsafeReadStablePtr #-}
+unsafeReadStablePtr :: StorableArray ix (StablePtr a) -> Int -> IO (StablePtr a)
+unsafeReadStablePtr (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readStablePtrArray# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, StablePtr e# #) }
+
+{-# INLINE unsafeReadInt8 #-}
+unsafeReadInt8 :: StorableArray ix Int8 -> Int -> IO Int8
+unsafeReadInt8 (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readInt8Array# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, I8# e# #) }
+
+{-# INLINE unsafeReadInt16 #-}
+unsafeReadInt16 :: StorableArray ix Int16 -> Int -> IO Int16
+unsafeReadInt16 (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readInt16Array# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, I16# e# #) }
+
+{-# INLINE unsafeReadInt32 #-}
+unsafeReadInt32 :: StorableArray ix Int32 -> Int -> IO Int32
+unsafeReadInt32 (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readInt32Array# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, I32# e# #) }
+
+{-# INLINE unsafeReadInt64 #-}
+unsafeReadInt64 :: StorableArray ix Int64 -> Int -> IO Int64
+unsafeReadInt64 (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readInt64Array# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, I64# e# #) }
+
+{-# INLINE unsafeReadWord8 #-}
+unsafeReadWord8 :: StorableArray ix Word8 -> Int -> IO Word8
+unsafeReadWord8 (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readWord8Array# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, W8# e# #) }
+
+{-# INLINE unsafeReadWord16 #-}
+unsafeReadWord16 :: StorableArray ix Word16 -> Int -> IO Word16
+unsafeReadWord16 (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readWord16Array# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, W16# e# #) }
+
+{-# INLINE unsafeReadWord32 #-}
+unsafeReadWord32 :: StorableArray ix Word32 -> Int -> IO Word32
+unsafeReadWord32 (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readWord32Array# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, W32# e# #) }
+
+{-# INLINE unsafeReadWord64 #-}
+unsafeReadWord64 :: StorableArray ix Word64 -> Int -> IO Word64
+unsafeReadWord64 (StorableArray _ _ marr#) (I# i#) = IO $ \s1# ->
+ case readWord64Array# marr# i# s1# of { (# s2#, e# #) ->
+ (# s2#, W64# e# #) }
+
+{-# INLINE unsafeWriteChar #-}
+unsafeWriteChar :: StorableArray ix Char -> Int -> Char -> IO ()
+unsafeWriteChar (StorableArray _ _ marr#) (I# i#) (C# e#) = IO $ \s1# ->
+ case writeWideCharArray# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteInt #-}
+unsafeWriteInt :: StorableArray ix Int -> Int -> Int -> IO ()
+unsafeWriteInt (StorableArray _ _ marr#) (I# i#) (I# e#) = IO $ \s1# ->
+ case writeIntArray# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteWord #-}
+unsafeWriteWord :: StorableArray ix Word -> Int -> Word -> IO ()
+unsafeWriteWord (StorableArray _ _ marr#) (I# i#) (W# e#) = IO $ \s1# ->
+ case writeWordArray# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWritePtr #-}
+unsafeWritePtr :: StorableArray ix (Ptr a) -> Int -> (Ptr a) -> IO ()
+unsafeWritePtr (StorableArray _ _ marr#) (I# i#) (Ptr e#) = IO $ \s1# ->
+ case writeAddrArray# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteFunPtr #-}
+unsafeWriteFunPtr :: StorableArray ix (FunPtr a) -> Int -> (FunPtr a) -> IO ()
+unsafeWriteFunPtr (StorableArray _ _ marr#) (I# i#) (FunPtr e#) = IO $ \s1# ->
+ case writeAddrArray# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteFloat #-}
+unsafeWriteFloat :: StorableArray ix Float -> Int -> Float -> IO ()
+unsafeWriteFloat (StorableArray _ _ marr#) (I# i#) (F# e#) = IO $ \s1# ->
+ case writeFloatArray# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteDouble #-}
+unsafeWriteDouble :: StorableArray ix Double -> Int -> Double -> IO ()
+unsafeWriteDouble (StorableArray _ _ marr#) (I# i#) (D# e#) = IO $ \s1# ->
+ case writeDoubleArray# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteStablePtr #-}
+unsafeWriteStablePtr :: StorableArray ix (StablePtr a) -> Int -> (StablePtr a) -> IO ()
+unsafeWriteStablePtr (StorableArray _ _ marr#) (I# i#) (StablePtr e#) = IO $ \s1# ->
+ case writeStablePtrArray# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteInt8 #-}
+unsafeWriteInt8 :: StorableArray ix Int8 -> Int -> Int8 -> IO ()
+unsafeWriteInt8 (StorableArray _ _ marr#) (I# i#) (I8# e#) = IO $ \s1# ->
+ case writeInt8Array# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteInt16 #-}
+unsafeWriteInt16 :: StorableArray ix Int16 -> Int -> Int16 -> IO ()
+unsafeWriteInt16 (StorableArray _ _ marr#) (I# i#) (I16# e#) = IO $ \s1# ->
+ case writeInt16Array# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteInt32 #-}
+unsafeWriteInt32 :: StorableArray ix Int32 -> Int -> Int32 -> IO ()
+unsafeWriteInt32 (StorableArray _ _ marr#) (I# i#) (I32# e#) = IO $ \s1# ->
+ case writeInt32Array# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteInt64 #-}
+unsafeWriteInt64 :: StorableArray ix Int64 -> Int -> Int64 -> IO ()
+unsafeWriteInt64 (StorableArray _ _ marr#) (I# i#) (I64# e#) = IO $ \s1# ->
+ case writeInt64Array# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteWord8 #-}
+unsafeWriteWord8 :: StorableArray ix Word8 -> Int -> Word8 -> IO ()
+unsafeWriteWord8 (StorableArray _ _ marr#) (I# i#) (W8# e#) = IO $ \s1# ->
+ case writeWord8Array# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteWord16 #-}
+unsafeWriteWord16 :: StorableArray ix Word16 -> Int -> Word16 -> IO ()
+unsafeWriteWord16 (StorableArray _ _ marr#) (I# i#) (W16# e#) = IO $ \s1# ->
+ case writeWord16Array# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteWord32 #-}
+unsafeWriteWord32 :: StorableArray ix Word32 -> Int -> Word32 -> IO ()
+unsafeWriteWord32 (StorableArray _ _ marr#) (I# i#) (W32# e#) = IO $ \s1# ->
+ case writeWord32Array# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }
+
+{-# INLINE unsafeWriteWord64 #-}
+unsafeWriteWord64 :: StorableArray ix Word64 -> Int -> Word64 -> IO ()
+unsafeWriteWord64 (StorableArray _ _ marr#) (I# i#) (W64# e#) = IO $ \s1# ->
+ case writeWord64Array# marr# i# e# s1# of { s2# ->
+ (# s2#, () #) }