list [] = [[]] list str = concat [pull x str | x <- [0..length str-1]] pull :: Int -> String -> [String] pull x str = [str !! x : rest | rest <- list (take x str ++ drop (x+1) str)]