Replace type families by GADTs for associating a monad with a mutable vector
[darcs-mirrors/vector.git] / Data / Vector / Unboxed.hs
index bd2250d..a6ffcc9 100644 (file)
@@ -20,12 +20,14 @@ data Vector a = Vector {-# UNPACK #-} !Int
 
 instance Unbox a => Base Vector a where
   {-# INLINE create #-}
-  create init = runST (do
-      Mut.Vector i n marr# <- init
-      ST (\s# -> case unsafeFreezeByteArray# marr# s# of
-                   (# s2#, arr# #) -> (# s2#, Vector i n arr# #)
-         )
-    )
+  create init = runST (do_create init)
+    where
+      do_create :: ST s (Mut.Vector (ST s) a) -> ST s (Vector a)
+      do_create init = do
+                         Mut.Vector i n marr# <- init
+                         ST (\s# -> case unsafeFreezeByteArray# marr# s# of
+                              (# s2#, arr# #) -> (# s2#, Vector i n arr# #)
+                            )
 
   {-# INLINE length #-}
   length (Vector _ n _) = n