on master help sign in
Make empty-pattern checks cheaper.
8f8701dBryan O'Sullivan
Data/Text.hs+4−4
@@ -917,7 +917,7 @@ split :: Text -- ^ Text to split on
917 -> Text -- ^ Input text
917 -> Text -- ^ Input text
918 -> [Text]
918 -> [Text]
919split pat src0
919split pat src0
920− | l == 0 = emptyError "split"
920+ | null pat = emptyError "split"
921 | l == 1 = splitWith (== (unsafeHead pat)) src0
921 | l == 1 = splitWith (== (unsafeHead pat)) src0
922 | otherwise = go src0
922 | otherwise = go src0
923 where
923 where
@@ -958,7 +958,7 @@ splitTimes :: Int -- ^ Maximum number of times to split
958 -> [Text]
958 -> [Text]
959splitTimes k pat src0
959splitTimes k pat src0
960 | k <= 0 = [src0]
960 | k <= 0 = [src0]
961− | l == 0 = emptyError "splitTimes"
961+ | null pat = emptyError "splitTimes"
962 | otherwise = go k src0
962 | otherwise = go k src0
963 where
963 where
964 l = length pat
964 l = length pat
@@ -1054,7 +1054,7 @@ filter p t = unstream (S.filter p (stream t))
1054
1054
1055findAll :: Text -> Text -> (Text, [Text])
1055findAll :: Text -> Text -> (Text, [Text])
1056findAll pat@(Text _ _ plen) src@(Text sarr soff slen)
1056findAll pat@(Text _ _ plen) src@(Text sarr soff slen)
1057− | plen == 0 = emptyError "findAll"
1057+ | plen <= 0 = emptyError "findAll"
1058 | otherwise = (h,t)
1058 | otherwise = (h,t)
1059 where
1059 where
1060 (h:t) = go 0 (search 0)
1060 (h:t) = go 0 (search 0)
@@ -1126,7 +1126,7 @@ elemIndices c t = S.elemIndices c (stream t)
1126-- invalid, and will cause an error to be raised.
1126-- invalid, and will cause an error to be raised.
1127count :: Text -> Text -> Int
1127count :: Text -> Text -> Int
1128count pat src0
1128count pat src0
1129− | l == 0 = emptyError "count"
1129+ | null pat = emptyError "count"
1130 | l == 1 = countChar (unsafeHead pat) src0
1130 | l == 1 = countChar (unsafeHead pat) src0
1131 | otherwise = go 0 src0
1131 | otherwise = go 0 src0
1132 where
1132 where