coldwa.st
Todos os guiasProgramaçãoWebDadosFerramentasBases de dadosHaskellConceitosCabal e buildsToolchainCompiladorDesempenhoEditor e HLS

Haskell · build · ferramentas

Stack vs Cabal: escolher uma ferramenta de build Haskell

Por ColdwastAtualizado a 14 de junho de 20268 min de leitura#haskell#cabal#stack
Um portátil numa secretária a mostrar código num editor
O Cabal e o Stack são as duas ferramentas de linha de comandos com que a maioria dos projetos Haskell é construída.

Depois de instalar um compilador Haskell, precisa de uma forma de gerir as dependências e construir o seu projeto. Em 2026, há duas escolhas mainstream: Cabal e Stack. Fazem o mesmo trabalho de base — obter as bibliotecas, construir o seu código, correr os testes — mas fazem compromissos diferentes quanto à proveniência dos pacotes e ao grau de reprodutibilidade das builds. Este guia explica o que é cada um, em que diferem, os comandos equivalentes e como escolher.

O que é o Cabal

O Cabal é o sistema de build original do Haskell. O termo abrange duas coisas: a biblioteca/especificação Cabal (o formato de ficheiro .cabal que descreve um pacote) e o cabal-install, a ferramenta de linha de comandos cabal que constrói os pacotes e resolve as dependências. Por defeito obtém as bibliotecas do Hackage, o arquivo central dos pacotes Haskell.

O Cabal moderno usa as builds locais ao estilo nix (os antigos comandos v2-, agora por defeito), que dão a cada projeto uma build isolada e um store global partilhado de pacotes construídos. Um resolvedor de dependências escolhe as versões que satisfazem os limites que declara:

-- in your .cabal file
build-depends: base >=4.14 && <5, text, aeson ^>=2.1

O operador caret ^>= significa « pelo menos esta versão, mas permite apenas as versões posteriores compatíveis ». As definições ao nível do projeto vivem num ficheiro cabal.project. É a toolchain mais estreitamente alinhada com as releases do GHC e do Hackage.

O que é o Stack

O Stack é uma ferramenta de build concebida em torno da reprodutibilidade. Em vez de resolver as versões contra todo o Hackage, constrói contra um snapshot Stackage: um conjunto curado de versões de pacotes que se sabe compilarem em conjunto. Fixa um snapshot em stack.yaml:

resolver: lts-22.14
packages:
  - .

Como o snapshot fixa cada versão, qualquer pessoa que obtenha o seu projeto e corra stack build obtém as mesmas versões de dependências — e o Stack instalará automaticamente o GHC correspondente a esse snapshot. Esta garantia « funciona igual em todo o lado » é o principal atrativo do Stack, sobretudo para equipas e CI.

Fluxos de código verde num ecrã escuro
Fluxos de código no ecrã — ambas as ferramentas obtêm as dependências e compilam-nas; diferem sobretudo na proveniência das versões.

As diferenças chave

  • Fonte dos pacotes — o Cabal resolve contra todo o Hackage; o Stack constrói contra um snapshot Stackage curado. O Stackage troca um pouco de atualidade por conjuntos garantidamente compatíveis.
  • Reprodutibilidade — o Stack fixa tudo através do snapshot por defeito. O Cabal pode ser igualmente reprodutível com um ficheiro cabal.project.freeze, mas ativa-o explicitamente.
  • Gestão do GHC — o Stack descarrega e gere a versão de GHC de que um snapshot precisa. Com o Cabal, traz o seu próprio GHC (habitualmente instalado via GHCup).
  • Ficheiros de configuração — ambos leem o ficheiro .cabal do pacote. O Stack acrescenta stack.yaml; o Cabal acrescenta cabal.project.
  • Alinhamento com o ecossistema — o Cabal segue de perto as releases do GHC e do Hackage; o Stack avança ao ritmo da curadoria dos snapshots.

Os comandos equivalentes

No dia a dia, os dois são parecidos:

-- Cabal                  -- Stack
cabal build               stack build
cabal run myapp           stack run
cabal test                stack test
cabal repl                stack ghci
cabal haddock             stack haddock

Ambos conduzem o mesmo compilador por baixo — veja o guia do GHC para as opções que importam. Note que o Cabal de hoje descende do workflow introduzido no Cabal 2.0, que substituiu a antiga abordagem das sandboxes.

Qual escolher?

Em 2026, ambos são bons e ativamente mantidos — não é um caso em que um esteja obsoleto. Uma regra prática razoável:

  • Escolha o Cabal se quiser a toolchain por defeito alinhada com o GHC, as versões mais recentes de pacotes do Hackage e um controlo fino sobre os limites de versões. É o caminho que a maioria dos novos tutoriais pressupõe.
  • Escolha o Stack se valoriza a reprodutibilidade chave na mão e a gestão automática do GHC, ou se está numa equipa onde « toda a gente obtém a mesma build » conta mais do que ter as versões de bibliotecas mais recentes.

Não tem de decidir para sempre: o GHCup instala ambos, e muitos projetos incluem um stack.yaml e um cabal.project para que os contribuidores possam usar um ou outro. Experimente um e mude se os seus compromissos não convencerem.

FAQ

Cabal ou Stack, qual é melhor? Nenhum é estritamente melhor; otimizam para coisas diferentes. O Cabal privilegia as versões Hackage atualizadas e o alinhamento estreito com o GHC; o Stack privilegia snapshots curados e reprodutíveis e a instalação automática do GHC.

O Stack e o Cabal usam o mesmo formato de pacote? Sim. Ambos leem o ficheiro .cabal do pacote. O Stack acrescenta stack.yaml por cima; o Cabal acrescenta cabal.project.

O que é um snapshot Stackage? Um conjunto curado de versões de pacotes Hackage verificadas para compilar em conjunto, identificado por um resolver como lts-22.14. Fixar um torna as builds reprodutíveis.

Posso passar do Stack para o Cabal mais tarde? Geralmente sim — o ficheiro .cabal é partilhado, por isso acrescenta sobretudo um cabal.project e fornece um GHC (via GHCup). Os limites de versões podem exigir uma pequena limpeza.

Novo na toolchain? Comece por instalar o Haskell com o GHCup, que configura o GHC, o Cabal e o Stack em conjunto.

Recomendado

Compila Haskell mais depressa

Tanto o Stack como o Cabal compilam mais depressa com mais núcleos e RAM do que um portátil — prático para projetos grandes e CI. A Infomaniak, fornecedor suíço que respeita a privacidade, oferece VPS e servidores cloud para as tuas builds.

Ver o cloud da Infomaniak →

Link de afiliado — apoia estes guias gratuitos.

Guia independente, mantido pela comunidade. coldwa.st é um site de recursos de programação; este artigo é um texto explicativo novo e original sobre as ferramentas de build Haskell, sem afiliação com o Cabal, o Stack, o Stackage ou os mantenedores do GHC. Os comandos e comportamentos refletem as ferramentas Haskell padrão — confirme com a documentação atual do Cabal/Stack.