|
1 | 1 | {-# OPTIONS_GHC -fno-warn-orphans #-}
|
2 |
| -{-# LANGUAGE BangPatterns, MagicHash, CPP, TypeFamilies #-} |
| 2 | +{-# LANGUAGE BangPatterns, MagicHash, CPP, OverloadedStrings, TypeFamilies #-} |
3 | 3 | #if __GLASGOW_HASKELL__ >= 702
|
4 | 4 | {-# LANGUAGE Trustworthy #-}
|
5 | 5 | #endif
|
@@ -1411,8 +1411,15 @@ break p t0 = break' t0
|
1411 | 1411 | -- >>> T.breakEnd (=='0') "180cm"
|
1412 | 1412 | -- ("180","cm")
|
1413 | 1413 | breakEnd :: (Char -> Bool) -> Text -> (Text, Text)
|
1414 |
| -breakEnd p src = let (a,b) = break p (reverse src) |
1415 |
| - in (reverse b, reverse a) |
| 1414 | +breakEnd p src = breakEnd' (reverseSpine src) where |
| 1415 | + reverseSpine = go Empty where |
| 1416 | + go res Empty = res |
| 1417 | + go res (Chunk t ts) = go (Chunk t res) ts |
| 1418 | + breakEnd' = go Empty where |
| 1419 | + go r Empty = (empty, r) |
| 1420 | + go r (Chunk t ts) = case T.breakEnd p t of |
| 1421 | + ("", _) -> go (Chunk t r) ts |
| 1422 | + (l, r') -> (reverseSpine (Chunk l ts), Chunk r' r) |
1416 | 1423 | {-# INLINE breakEnd #-}
|
1417 | 1424 |
|
1418 | 1425 | -- | /O(n)/ 'span', applied to a predicate @p@ and text @t@, returns
|
|
0 commit comments