coldwa.st
Todas las guíasProgramaciónWebDatosHerramientasBases de datosHaskellConceptosCabal y buildsToolchainCompiladorRendimientoEditor y HLS

Haskell · build · tooling

Stack vs Cabal: elegir una herramienta de compilación de Haskell

Por ColdwastActualizado el 14 de junio de 20268 min de lectura#haskell#cabal#stack
Un portátil sobre un escritorio que muestra código en un editor
Cabal y Stack son las dos herramientas de línea de comandos con las que se compila la mayoría de los proyectos Haskell.

Una vez que tienes instalado un compilador de Haskell, necesitas una forma de gestionar las dependencias y compilar tu proyecto. En 2026 hay dos opciones principales: Cabal y Stack. Hacen el mismo trabajo de fondo — obtener bibliotecas, compilar tu código, ejecutar tests — pero toman decisiones distintas sobre de dónde vienen los paquetes y cuán reproducibles son las builds. Esta guía explica qué es cada una, en qué se diferencian, los comandos equivalentes y cómo elegir.

Qué es Cabal

Cabal es el sistema de compilación original de Haskell. La palabra abarca dos cosas: la biblioteca/especificación Cabal (el formato de archivo .cabal que describe un paquete) y cabal-install, la herramienta de línea de comandos cabal que compila paquetes y resuelve dependencias. Por defecto obtiene las bibliotecas de Hackage, el archivo central de paquetes de Haskell.

El Cabal moderno usa builds locales al estilo Nix (los antiguos comandos v2-, ahora los predeterminados), que dan a cada proyecto una build aislada y un almacén global compartido de paquetes compilados. Un resolutor de dependencias elige las versiones que satisfacen los límites que declaras:

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

El operador caret ^>= significa "al menos esta versión, pero permite solo las posteriores compatibles." Los ajustes de todo el proyecto viven en un archivo cabal.project. Este es el toolchain más estrechamente alineado con los lanzamientos de GHC y Hackage.

Qué es Stack

Stack es una herramienta de compilación construida en torno a la reproducibilidad. En lugar de resolver versiones contra todo Hackage, compila contra un snapshot de Stackage: un conjunto curado de versiones de paquetes que se sabe que compilan juntas. Fijas un snapshot en stack.yaml:

resolver: lts-22.14
packages:
  - .

Como el snapshot fija cada versión, cualquiera que clone tu proyecto y ejecute stack build obtiene las mismas versiones de dependencias — y Stack instalará automáticamente el GHC que ese snapshot necesita. Esa garantía de que "funciona igual en todas partes" es el principal atractivo de Stack, especialmente para equipos y CI.

Cadenas de código verde en una pantalla oscura
Cadenas de código en la pantalla — ambas herramientas obtienen las dependencias y las compilan; se diferencian sobre todo en de dónde vienen las versiones.

Las diferencias clave

  • Origen de los paquetes — Cabal resuelve contra todo Hackage; Stack compila contra un snapshot curado de Stackage. Stackage cambia algo de frescura por conjuntos con compatibilidad garantizada.
  • Reproducibilidad — Stack fija todo mediante el snapshot por defecto. Cabal puede ser igual de reproducible con un archivo cabal.project.freeze, pero optas por ello.
  • Gestión de GHC — Stack descarga y gestiona la versión de GHC que necesita un snapshot. Con Cabal, traes tu propio GHC (normalmente instalado mediante GHCup).
  • Archivos de configuración — ambos leen el archivo .cabal del paquete. Stack añade stack.yaml; Cabal añade cabal.project.
  • Alineación con el ecosistema — Cabal sigue de cerca los lanzamientos de GHC y Hackage; Stack avanza al ritmo de la curación de snapshots.

Los comandos equivalentes

En el día a día, las dos se sienten parecidas:

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

Ambas dirigen el mismo compilador por debajo — consulta la guía de GHC para los flags que importan. Ten en cuenta que el Cabal de hoy desciende del flujo de trabajo introducido en Cabal 2.0, que reemplazó el antiguo enfoque de sandbox.

¿Cuál deberías elegir?

En 2026, ambas son buenas y se mantienen activamente — no es un caso en el que una esté obsoleta. Una regla razonable:

  • Elige Cabal si quieres el toolchain por defecto y alineado con GHC, las últimas versiones de paquetes de Hackage y un control fino sobre los límites de versión. Es el camino que asumen la mayoría de los tutoriales nuevos.
  • Elige Stack si valoras la reproducibilidad lista para usar y la gestión automática de GHC, o si estás en un equipo donde "todos obtienen la misma build" importa más que tener las versiones de bibliotecas más nuevas.

No tienes que decidir para siempre: GHCup instala ambas, y muchos proyectos incluyen un stack.yaml y un cabal.project para que los colaboradores puedan usar cualquiera de las dos. Prueba una y cambia si sus compromisos no encajan.

Preguntas frecuentes

¿Es mejor Cabal o Stack? Ninguna es estrictamente mejor; se optimizan para cosas distintas. Cabal favorece versiones actualizadas de Hackage y una estrecha alineación con GHC; Stack favorece snapshots curados y reproducibles e instalaciones automáticas de GHC.

¿Stack y Cabal usan el mismo formato de paquete? Sí. Ambas leen el archivo .cabal del paquete. Stack añade stack.yaml encima; Cabal añade cabal.project.

¿Qué es un snapshot de Stackage? Un conjunto curado de versiones de paquetes de Hackage verificadas para compilar juntas, identificado por un resolver como lts-22.14. Fijar uno hace que las builds sean reproducibles.

¿Puedo cambiar de Stack a Cabal más adelante? Normalmente sí — el archivo .cabal es compartido, así que básicamente añades un cabal.project y proporcionas un GHC (mediante GHCup). Puede que los límites de versión necesiten un pequeño retoque.

¿Nuevo en el toolchain? Empieza por instalar Haskell con GHCup, que configura GHC, Cabal y Stack a la vez.

Recomendado

Compila Haskell más rápido

Tanto Stack como Cabal compilan más rápido con más núcleos y RAM que un portátil — útil para proyectos grandes y CI. Infomaniak, host suizo y respetuoso con la privacidad, ofrece VPS y servidores cloud para tus builds.

Ver el cloud de Infomaniak →

Enlace de afiliado — apoya estas guías gratuitas.

Guía independiente y mantenida por la comunidad. coldwa.st es un sitio de recursos de programación; este artículo es texto explicativo nuevo y original sobre las herramientas de compilación de Haskell, no afiliado a Cabal, Stack, Stackage ni a los mantenedores de GHC. Los comandos y el comportamiento reflejan las herramientas estándar de Haskell — verifícalo con la documentación actual de Cabal/Stack.