Haskell · tooling · editor
Haskell Language Server (HLS) en 2026: configuración y soluciones comunes
Escribir Haskell sin un backend de IDE significa entornar los ojos ante los errores de tipo después de cada compilación. El Haskell Language Server (HLS) soluciona eso: implementa el Language Server Protocol (LSP), dándote tipos en línea, autocompletado, ir-a-definición, documentación al pasar el cursor y refactorizaciones en VS Code, Neovim y otros editores. Esta guía cubre qué es HLS, cómo instalarlo de forma limpia en 2026, integrarlo en tu editor y el puñado de errores que hacen tropezar a la gente.
Qué hace HLS realmente
HLS es un único servidor con el que los editores hablan por LSP. Proporciona:
- Información de tipos al pasar el cursor y en línea.
- Autocompletado y sugerencias de importación.
- Ir-a-definición, buscar-referencias y símbolos del documento.
- Acciones de código: añadir una importación que falta, rellenar una firma de tipo, aplicar una sugerencia.
- Linting mediante las sugerencias integradas de hlint.
Como habla LSP, el mismo servidor da vida a cualquier editor — instalas HLS una vez y eliges un plugin cliente.
Instalar HLS con GHCup
El camino limpio es el mismo gestor de toolchain que usas para el compilador. Si aún no has configurado el toolchain, empieza con nuestra guía de instalación con GHCup y luego añade HLS:
ghcup install hls recommended
ghcup set hls recommended La regla más importante de todas: HLS debe ser compatible con tu versión activa de GHC. Instala la build de HLS que coincida con el GHC con el que compilas — la interfaz interactiva ghcup tui muestra qué versiones de HLS cubren qué GHC.
Integrarlo en tu editor
- VS Code: instala la extensión oficial Haskell; puede gestionar HLS por ti o usar el que instalaste con GHCup. Apúntala al HLS de GHCup para evitar desajustes de versión.
- Neovim: configura
haskell-tools.nvimo el cliente LSP integrado conhaskell-language-server-wrapperen tu PATH. - Otros editores: cualquier editor con LSP (Emacs con lsp-mode, Helix, Zed) funciona — apúntalo al binario
haskell-language-server-wrapper.
El binario -wrapper selecciona automáticamente el HLS adecuado para el GHC de cada proyecto, por lo que apuntar tu editor a él (en lugar de a una versión fija) evita la mayoría de los desajustes.
Errores comunes y soluciones
- "No HLS version for GHC X.Y". Tu GHC es más reciente que cualquier HLS instalado. Actualiza HLS mediante
ghcup tui, o cambia el proyecto a un GHC que HLS soporte. - HLS se reinicia constantemente / se queda sin memoria. Los proyectos grandes pueden agotar la RAM durante la indexación; cierra otras herramientas y asegúrate de que tu máquina tenga suficiente memoria para el tamaño del proyecto.
- Errores de "cradle" / componentes incorrectos. HLS lee tu build a través de los archivos del proyecto; asegúrate primero de que el proyecto compila con
cabal build, y de que solo añades unhie.yamlcuando falla la autodetección. - Resultados obsoletos tras un cambio de dependencia. Reinicia el servidor de lenguaje desde tu editor; HLS cachea el plan de compilación.
Una regla fiable: si HLS se comporta mal, confirma primero que el proyecto compila desde la línea de comandos — consulta cómo funcionan las builds paralelas en cómo Cabal usa tus núcleos, y el trasfondo del modelo de compilación en Cabal 2.0.
Preguntas frecuentes
¿Es HLS gratuito y oficial? Sí — es el servidor de lenguaje de código abierto y estándar de la comunidad para Haskell, instalable a través de GHCup.
¿Necesito Cabal o Stack para HLS? HLS lee el sistema de compilación que use tu proyecto; funciona tanto con proyectos de Cabal como de Stack.
¿Por qué HLS tiene que coincidir con mi GHC? HLS se construye contra una API específica de GHC, así que cada build de HLS soporta un conjunto de versiones de GHC. Usa el binario wrapper para autoseleccionar la adecuada por proyecto.
¿Funciona HLS en Windows? Sí, mediante el instalador de GHCup para Windows y las mismas extensiones de editor.