Defer inlining of Data.Text.length
authorBen Gamari <ben@smart-cactus.org>
Tue, 29 Mar 2016 17:38:26 +0000 (19:38 +0200)
committerBen Gamari <ben@smart-cactus.org>
Tue, 29 Mar 2016 17:38:26 +0000 (19:38 +0200)
Otherwise it may be inlined before the compareLength rewrite rules have
a change to fire.

Data/Text.hs

index 40c9f8a..13cf936 100644 (file)
@@ -571,7 +571,9 @@ isSingleton = S.isSingleton . stream
 -- Subject to fusion.
 length :: Text -> Int
 length t = S.length (stream t)
-{-# INLINE length #-}
+{-# INLINE [0] length #-}
+-- length needs to be phased after the compareN/length rules otherwise
+-- it may inline before the rules have an opportunity to fire.
 
 -- | /O(n)/ Compare the count of characters in a 'Text' to a number.
 -- Subject to fusion.