module HaskellWorks.Data.Uri.Internal.List ( mapLast , dropSave1 , splitBy ) where mapLast :: (a -> a) -> [a] -> [a] mapLast f [a] = [f a] mapLast _ [] = [] mapLast f (a:as) = a:mapLast f as dropSave1 :: [a] -> [a] dropSave1 [x] = [x] dropSave1 (_:xs) = xs dropSave1 [] = [] splitBy :: (a -> Bool) -> [a] -> [[a]] splitBy p as = if null as then [] else go as where go bs = let (cs, ds) = break p bs in cs:if null ds then [] else go (drop 1 ds)