@@ -102,22 +102,16 @@ instance IArray (MArray s) where
102102
103103-- | Create an uninitialized mutable array.
104104unsafeNew :: forall s. Int -> ST s (MArray s)
105−unsafeNew n =
105+unsafeNew n
106+ | len < 0 = error $ "Data.Text.Array.unsafeNew: invalid length " ++ show n
107+ | otherwise = ST $ \s1# ->
108+ case newByteArray# len# s1# of
109+ (# s2#, marr# #) -> (# s2#, MArray marr#
106110#if defined(ASSERTS)
107− assert (n >= 0) .
111+ n
108112#endif
109− ST $ \s1# ->
110− case bytesInArray n of
111− len@(I# len#) ->
112−#if defined(ASSERTS)
113− if len < 0 then error (show ("unsafeNew",len)) else
114−#endif
115− case newByteArray# len# s1# of
116− (# s2#, marr# #) -> (# s2#, MArray marr#
117−#if defined(ASSERTS)
118− n
119−#endif
120− #)
113+ #)
114+ where !len@(I# len#) = bytesInArray n
121115{-# INLINE unsafeNew #-}
122116
123117-- | Freeze a mutable array. Do not mutate the 'MArray' afterwards!