Improve performance of strict uncons by ~5%
authorBryan O'Sullivan <bos@serpentine.com>
Tue, 22 Dec 2015 20:16:29 +0000 (12:16 -0800)
committerBryan O'Sullivan <bos@serpentine.com>
Tue, 22 Dec 2015 20:16:29 +0000 (12:16 -0800)
Data/Text.hs

index c22595f..40c9f8a 100644 (file)
@@ -485,8 +485,8 @@ head t = S.head (stream t)
 uncons :: Text -> Maybe (Char, Text)
 uncons t@(Text arr off len)
     | len <= 0  = Nothing
-    | otherwise = Just (c, text arr (off+d) (len-d))
-    where Iter c d = iter t 0
+    | otherwise = Just $ let !(Iter c d) = iter t 0
+                         in (c, text arr (off+d) (len-d))
 {-# INLINE [1] uncons #-}
 
 -- | Lifted from Control.Arrow and specialized.