not-in-base-0.1.1: src/NIB/List.hs
{-# LANGUAGE UndecidableInstances, OverlappingInstances, FlexibleInstances, TypeSynonymInstances
#-}
module NIB.List where
import Data.Char
import Data.Maybe
import Data.List
import Control.Monad
-- | Splits a list @x@ of @a@ into a list of lists of @a@ at every @c@.
--
-- > "splitBy "foo,bar" "',' == ["foo","bar"] '
splitBy :: (Eq a) => a -> [a] -> [[a]]
splitBy _ [] = [[]]
splitBy c x = if fst p == [] then [snd p] else fst p : splitBy c ( snd p )
where p = break (== c) x
-- | Trims every element satisfying @c@ from the beginning or end of the list.
--
-- > trim (==' ') " foo " == "foo"
trim :: (a -> Bool) -> [a] -> [a]
trim c = reverse . dropWhile c . reverse . dropWhile c
-- | Convert first element in list
--
-- > convertFirst (toUpper) "fO0" == "FO0"
convertFirst :: (a -> a) -> [a] -> [a]
convertFirst _ [] = []
convertFirst f (x:xs) = f x:xs