Excluindo caracteres que correspondem a um padrão

Haskell:
Excluindo caracteres que correspondem a um padrão

Como fazer:

import Data.Char (isSpace, isDigit)
import Data.List (partition)

-- Remove caracteres que são dígitos
removeDigitos :: String -> String
removeDigitos = filter (not . isDigit)

-- Remove espaços em branco
removeEspacos :: String -> String
removeEspacos = filter (not . isSpace)

-- Exemplo de uso
main :: IO ()
main = do
    let texto = "Haskell 2023, a linguagem funcional!"
    putStrLn $ removeDigitos texto
    putStrLn $ removeEspacos texto

Saída de exemplo:

Haskell , a linguagem funcional!
Haskell2023,alinguagemfuncional!

Aprofundamento

Historicamente, operar em strings sempre foi parte essencial das tarefas de computação, desde a criação de mecanismos de busca a linguagens como Perl que são famosas pelo seu poderoso suporte a expressões regulares. Em Haskell, embora não haja um suporte tão imediato para regex quanto em Perl, a linguagem oferece funções puras e de alta ordem, como filter, para manipulação de strings de maneira concisa e expressiva.

Alternativas incluem o uso de expressões regulares com o pacote regex-tdfa, que oferece uma maior flexibilidade e potência para padrões mais complexos. Porém, isso adiciona complexidade e pode ser exagero para tarefas simples.

Implementar a remoção de caracteres é direto usando filter, particionando a string original com partition ou utilizando list comprehensions. Haskell oferece uma vantagem através de suas funções de ordem superior, tornando essas operações simples e com performance otimizada devido à preguiça inerente da linguagem, que avalia expressões somente quando necessárias.

Veja Também