@@ -158,8 +158,10 @@ flush = Builder $ \ k buf@(Buffer p o u l) ->
158158 if u == 0
159159 then k buf
160160 else do arr <- A.unsafeFreeze p
161− buf' <- inlineInterleaveST (k (Buffer p (o+u) 0 l))
162− return (Text arr o u : buf')
161+ let !b = Buffer p (o+u) 0 l
162+ !t = Text arr o u
163+ buf' <- inlineInterleaveST (k b)
164+ return $! t : buf'
163165
164166------------------------------------------------------------------------
165167
@@ -175,8 +177,7 @@ withSize f = Builder $ \ k buf@(Buffer _ _ _ l) ->
175177
176178-- | Map the resulting list of texts.
177179mapBuilder :: ([S.Text] -> [S.Text]) -> Builder
178−mapBuilder f = Builder $ \ k buf -> do txt <- k buf
179− return (f txt)
180+mapBuilder f = Builder (fmap f .)
180181
181182------------------------------------------------------------------------
182183
@@ -212,7 +213,7 @@ writeNBuffer :: Int -> (A.MArray s Word16 -> Int -> ST s ()) -> (Buffer s)
212213 -> ST s (Buffer s)
213214writeNBuffer n f (Buffer p o u l) = do
214215 f p (o+u)
215− return (Buffer p o (u+n) (l-n))
216+ return $! Buffer p o (u+n) (l-n)
216217{-# INLINE writeNBuffer #-}
217218
218219newBuffer :: Int -> ST s (Buffer s)