on master help sign in
Simplify the unstream code
commit7366026675a94f6a7391c7f661034d8e9785e8bb authorBryan O'Sullivan <bos@serpentine.com> dateSat 23 Jun 2012, 21:22 (14 years ago) parenteb0076e
1 file changed+5−7
Data/Text/Fusion.hs+5−7
Data/Text/Fusion.hs+5−7
@@ -95,13 +95,10 @@ reverseStream (Text arr off len) = Stream next (off+len-1) (maxSize len)
9595
9696-- | /O(n)/ Convert a 'Stream Char' into a 'Text'.
9797unstream :: Stream Char -> Text
98−unstream (Stream next0 s0 len) = a
99− where
100− a = runText (\done -> A.new mlen >>= \arr -> first done arr mlen s0 0)
101− where mlen = upperBound 4 len
102− first done = outer
103− where
104− outer arr top = loop
98+unstream (Stream next0 s0 len) = runText $ \done -> do
99+ let mlen = upperBound 4 len
100+ arr0 <- A.new mlen
101+ let outer arr top = loop
105102 where
106103 loop !s !i =
107104 case next0 s of
@@ -117,6 +114,7 @@ unstream (Stream next0 s0 len) = a
117114 loop s' (i+d)
118115 where j | ord x < 0x10000 = i
119116 | otherwise = i + 1
117+ outer arr0 mlen s0 0
120118{-# INLINE [0] unstream #-}
121119{-# RULES "STREAM stream/unstream fusion" forall s. stream (unstream s) = s #-}
122120