hunk ./src/Data/List/HT/Private.hs 204 --- foldr (\ x ~yt@(y:ys) -> if p x then [x]:yt else (x:y):ys) [[]] hunk ./src/Data/List/HT/Private.hs 211 +segmentAfter' :: (a -> Bool) -> [a] -> [[a]] +segmentAfter' p = + foldr (\ x ~yt@(y:ys) -> if p x then [x]:yt else (x:y):ys) [[]] + hunk ./src/Data/List/HT.hs 16 + L.segmentAfterMaybe, + L.segmentBeforeMaybe, hunk ./src/Data/List/HT/Private.hs 4 - findIndices, foldl', ) + findIndices, foldl', mapAccumL, ) hunk ./src/Data/List/HT/Private.hs 8 -import Data.Tuple.HT (mapPair, mapFst, mapSnd, forcePair, ) +import Data.Tuple.HT (mapPair, mapFst, mapSnd, forcePair, swap, ) hunk ./src/Data/List/HT/Private.hs 303 +{- | +> Data.List.HT Data.Char> segmentBeforeMaybe (\c -> toMaybe (isLetter c) (toUpper c)) "123a5345b---" +> ("123",[('A',"5345"),('B',"---")]) +-} +segmentBeforeMaybe :: + (a -> Maybe b) -> + [a] -> ([a], [(b, [a])]) +segmentBeforeMaybe f = + forcePair . + foldr + (\ x ~(y,ys) -> + case f x of + Just b -> ([],(b,y):ys) + Nothing -> (x:y,ys)) + ([],[]) + +{- | +> Data.List.HT Data.Char> segmentAfterMaybe (\c -> toMaybe (isLetter c) (toUpper c)) "123a5345b---" +> ([("123",'A'),("5345",'B')],"---") +-} +segmentAfterMaybe :: + (a -> Maybe b) -> + [a] -> ([([a], b)], [a]) +segmentAfterMaybe f = + swap . + uncurry (mapAccumL (\as0 (b,as1) -> (as1, (as0,b)))) . + segmentBeforeMaybe f + + hunk ./src/Data/List/HT/Private.hs 201 +See package @non-empty@ for more precise result type. hunk ./src/Data/List/HT/Private.hs 244 +See package @non-empty@ for more precise result type.