Bryan O'Sullivan avatar Bryan O'Sullivan committed 80b087d

Tidy up unstream

Comments (0)

Files changed (1)

Data/Text/Fusion.hs

 unstream :: Stream Char -> Text
 unstream (Stream next0 s0 len) = Text (fst a) 0 (snd a)
     where
-      a :: ((A.Array Word16),Int)
-      a = runST ((A.unsafeNew len :: ST s (A.MArray s Word16))
-                 >>= (\arr -> loop arr 0 len s0))
+      a = runST (A.unsafeNew len >>= (\arr -> loop arr 0 len s0))
       loop arr !i !top !s
-          | i + 1 > top = do arr' <- A.unsafeNew (top*2)
-                             case next0 s of
-                               Done -> liftM2 (,) (A.unsafeFreeze arr) (return i)
-                               _    -> copy arr arr' >> loop arr' i (top*2) s
+          | i + 1 > top = case next0 s of
+                            Done -> liftM2 (,) (A.unsafeFreeze arr) (return i)
+                            _    -> do
+                              arr' <- A.unsafeNew (top*2)
+                              copy arr arr' >> loop arr' i (top*2) s
           | otherwise = case next0 s of
                Done       -> liftM2 (,) (A.unsafeFreeze arr) (return i)
                Skip s'    -> loop arr i top s'
                Yield x s'
                    | n < 0x10000 -> do
-                        A.unsafeWrite arr i (fromIntegral n :: Word16)
+                        A.unsafeWrite arr i (fromIntegral n)
                         loop arr (i+1) top s'
                    | otherwise   -> do
                         A.unsafeWrite arr i       l
                         A.unsafeWrite arr (i + 1) r
                         loop arr (i+2) top s'
                    where
-                     n :: Int
                      n = ord x
-                     m :: Int
                      m = n - 0x10000
-                     l :: Word16
-                     l = fromIntegral $ (shiftR m 10) + (0xD800 :: Int)
-                     r :: Word16
-                     r = fromIntegral $ (m .&. (0x3FF :: Int)) + (0xDC00 :: Int)
+                     l = fromIntegral $ (m `shiftR` 10) + 0xD800
+                     r = fromIntegral $ (m .&. 0x3FF) + 0xDC00
 {-# INLINE [0] unstream #-}
 {-# RULES "STREAM stream/unstream fusion" forall s. stream (unstream s) = s #-}
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.