Emacs ❤ Haskell em GIFs

O porquê de usar o Emacs para programar Haskell em 6 GIFs

Acho um pouco tolo ficar evangelizando um editor. No final, não acho um bom aviso não gastar muito tempo com isso e usar o que funciona para você. Apesar disso, meu ambiente de desenvolvimento para Haskell hoje me ajuda muito a aprender mais sobre a linguagem e escrever programas melhores mais rápido. Esses GIFs ilustram coisas que acho sensacionais no meu set-up.

1. evil-mode: Vim

Por muito tempo, foi um usuário do Vim. Ainda o uso para tarefas leves e ele é um editor ótimo. Eu amo o Vim. Não posso viver sem ele e seus atalhos para movimento e operação sobre o texto. Mas quando comecei a escrever um pouco mais de Haskell, a falta de processos assíncronos começou a ser um problema. O sintax-checker levava muito tempo para rodar e travava o editor, o que era um pouco frustrante. Por isso, decidi migrar para o Emacs, que tem suporte para processos assíncronos.

Falo disso, porque se esse é seu caso, o Emacs oferece uma forma de manter o melhor dos dois mundos, que é o que uso. É o evil-mode; uma camada de emulação do Vim que se comporta quase perfeitamente como o editor.

Uso ele em conjunto com:

Entre outros não tão essenciais. Acaba que tenho um ambiente muito parecido com meu Vim.

2. eshell: Começando um novo projeto

Isso foi tudo dentro do Emacs; usei o stack para criar um novo projeto. Abri seu arquivo principal e comecei a programar. O Emacs te deixa rodar shells dentro do editor! Não é algo que uso o tempo todo, mas é bom de ter; não sei se o VimShell teve progresso, mas a última vez que o vi ele não era usável.

Pacotes que uso nesse GIF:

3. haskell-mode: GHCi dentro do editor

Eu posso rodar um GHCi dentro do meu editor! E automaticamente com um keybinding:

  • Carregar o código no qual estou trabalhando
  • Ver o resultado de uma expressão
  • Inferir e inserir o tipo de uma expressão que escrevi

O haskell-mode está disponível aqui.

4. flycheck: hlint e erros de compilação

Usando:

5. haskell-mode: Adicionando imports e dependências

Sem nenhuma fricção; acabei de adicionar um import e uma dependência. O haskell-mode detectou de qual pacote a dependência vinha, qual era sua última versão e interativamente adicionou ela no meu .cabal. Então posso seguir a vida.

6. codex e tags: Pulando para a definição de qualquer coisa

Rodo codex update na raiz do repositório e tenho um arquivo de TAGS gerado e carregado pelo Emacs. Agora posso pular para a definição de (quase) qualquer símbolo, incluindo símbolos importados de pacotes arbitrários do Hackage.

Para isso uso:

  • codex
  • Suporte built-in a tags do Emacs e uns atalhos

dotfiles & HaskellBR

Veja como tudo isso está configurado nos meus dotfiles em: https://github.com/yamadapc/dotfiles

E entre em contato com a comunidade HaskellBR! Entre no blog, no site, no Slack, no IRC, na lista de e-mails, participe do nosso próximo encontro em São Paulo ou dê uma olhada no código no GitHub e na nossa instância privada do Gogs.

O post de hoje foi semigroups; lista NonEmpty e um caso de estudo de tipos e testes.

@yamadapc