@@ -158,8 +158,10 @@ flush = Builder $ \ k buf@(Buffer p o u l) ->
158 if u == 0
158 if u == 0
159 then k buf
159 then k buf
160 else do arr <- A.unsafeFreeze p
160 else do arr <- A.unsafeFreeze p
161− buf' <- inlineInterleaveST (k (Buffer p (o+u) 0 l))
161+ let !b = Buffer p (o+u) 0 l
162− return (Text arr o u : buf')
162+ !t = Text arr o u
163+ buf' <- inlineInterleaveST (k b)
164------------------------------------------------------------------------
166------------------------------------------------------------------------
@@ -175,8 +177,7 @@ withSize f = Builder $ \ k buf@(Buffer _ _ _ l) ->
176-- | Map the resulting list of texts.
178-- | Map the resulting list of texts.
177mapBuilder :: ([S.Text] -> [S.Text]) -> Builder
179mapBuilder :: ([S.Text] -> [S.Text]) -> Builder
178−mapBuilder f = Builder $ \ k buf -> do txt <- k buf
180+mapBuilder f = Builder (fmap f .)
181------------------------------------------------------------------------
182------------------------------------------------------------------------
@@ -212,7 +213,7 @@ writeNBuffer :: Int -> (A.MArray s Word16 -> Int -> ST s ()) -> (Buffer s)
212 -> ST s (Buffer s)
213 -> ST s (Buffer s)
213writeNBuffer n f (Buffer p o u l) = do
214writeNBuffer n f (Buffer p o u l) = do
214 f p (o+u)
215 f p (o+u)
215− return (Buffer p o (u+n) (l-n))
216+ return $! Buffer p o (u+n) (l-n)
216{-# INLINE writeNBuffer #-}
217{-# INLINE writeNBuffer #-}
218newBuffer :: Int -> ST s (Buffer s)
219newBuffer :: Int -> ST s (Buffer s)