Hackeando pacotes melhores para o Haskell

Propondo um projeto de contribuições automatizadas no GitHub

Apesar de uma linguagem relativamente de nicho, quando comparada a plataformas como a JVM, Node.js ou Python, Haskell é uma linguagem de programação funcional tremendamente popular, com uma coleção enorme de pacotes re-utilizáveis no Hackage. Ainda que de muita alta qualidade, as vezes pacotes não têm em sua base de código coisas muito boas como um README conciso e fácil de entender ou um sistema de integração contínua. Nesso post proponho um hack para solucionar isso além da capacidade de um indivíduo ou grupo de indivíduos, mesmo que marginalmente.

Sim, não chegam perto em número dos milhões de pacotes publicados no NPM ou no Maven, mas têm features que dariam inveja a qualquer programador dessas plataformas. Coisas como suporte de primeira classe à:

Ainda assim, há um pouco de fragmentação e isolamento dos meios convencionais de distribuição de documentação e de validação do código, que eu considero danosos. Afinal, é um padrão em 2015 distribuir e encontrar código pelo GitHub, encontrar um README com exemplos que possamos copiar e colar para começar o trabalho e ter a segurança de testes automatizados, status de dependências desatualizadas, cobertura de testes e assim por diante.

Tudo isso é muito simples de ser adicionado. Se você tem o gem do travis instalado, ativar uma build para seu repositório se resume a:

$ travis init
Detected repository as rightfold/open-browser, is this correct? |yes|
Main programming language used: |Haskell|

Adicionar uma test-suite também pode ser automatizado; fiz isso no projeto hspec-setup para que fosse mais fácil criar pequenos pacotes com boas suites de testes.

Na comunidade de Haskell, até configurar uma matriz de builds com várias versões do compilador é suportado em um comando.

A ideia: ciência maluca

Criei um usuário no GitHub chamado haskellbrbot. E quero escrever um programa que:

  • Vasculhe o índice de pacotes do Hackage
  • Encontre pacotes sem os campos do .cabal: tested-with ou homepage
  • Encontre seus repositórios no GitHub
  • Detecte se há exemplos e escolha o menor deles para mostrar no README
  • Adicione os campos faltando no .cabal
  • Adicione um .travis.yml
  • Adicione badges no README para CI, tracking de dependências
  • Adicione uma seção no README, caso não esteja lá para a licença
  • Adicione uma seção no README, caso não esteja lá para um exemplo
  • Adicione uma seção no README, caso não esteja lá para a instalação
  • Abra um Pull Request com as melhorias

No momento, temos que fazer essas coisas na mão, como fiz com o pacote open-browser que precisava para uma adição ao stack.

@yamadapc