{- | Split a list by a given character and select the nth list. > cut ' ' 2 "foo bar baz quux" -> "bar" -} cut :: Integer -> Char -> String -> String cut pos = cutR [pos] {- | Split a list by a given character and select ranges of the resultant lists. > cutR [2..4] ' ' "foo bar baz quux foobar" -> "baz quux foobar" > cutR [1..1000] ' ' "foo bar baz quux foobar" -> "bar baz quux foobar" > cutR [-1000..1000] ' ' "foo bar baz quux foobar" -> "foo bar baz quux foobar" Note that too large and too small indices are essentially ignored. -} cutR :: [Integer] -> Char -> String -> String cutR nums delim z = drop 1 $ concat [delim:x | (x, y) <- zip string [0..], elem y nums] where string = split delim z