Un cascarrabias prueba un servidor de lenguaje para Haskell

Fuentes: A curmudgeon tries a language server

El desarrollo de software ha estado dominado durante décadas por el ciclo tradicional de editar, compilar y ejecutar. Sin embargo, los programadores de Lisp disfrutan de una experiencia radicalmente distinta: escriben código directamente en un REPL conectado al proceso en ejecución, lo que permite modificar el sistema en caliente sin reiniciar. Este artículo narra cómo un desarrollador de Haskell, escéptico ante las nuevas herramientas, intenta acercarse a ese flujo de trabajo mediante la combinación del servidor de lenguaje de Haskell (hls), el vigilante de código ghcid y la biblioteca foreign-store.

El autor comienza explicando su forma tradicional de trabajar y su envidia hacia los lispistas. Luego enumera las posibilidades y limitaciones en Haskell: no hay acceso al proceso en ejecución, pero el sistema de tipos reduce las excepciones, y el servidor de lenguaje integrado en Emacs a través de Eglot ofrece introspección de código de calidad. La clave está en ghcid, que recompila automáticamente los cambios y ejecuta una función tras la compilación; combinado con foreign-store, puede reiniciar la aplicación sin perder el estado. De este modo, se simula parte del flujo de trabajo de Lisp: escribir pruebas como experimentos, guardar, y ver los resultados al instante sin salir del editor.

Para probar esta idea, el autor trabaja en un proyecto de ecuaciones diferenciales. Describe su objetivo: visualizar campos de pendientes y soluciones concretas que se actualicen en una ventana al guardar los cambios. La parte más compleja fue la configuración inicial: desde cabal init hasta la integración de Eglot con hls. Aunque la instalación requiere numerosos pasos, después solo se necesitan dos para habilitar hls en cualquier proyecto. El autor advierte que ciertas estructuras de proyecto multiparte causan problemas con ghci y ghcid, por lo que recomienda un único ejecutable.

El artículo concluye que, aunque no es exactamente la experiencia Lisp, el flujo resultante incorpora algunas de sus ventajas: retroalimentación rápida, reinicio automático sin pérdida de estado y una forma más fluida de experimentar con el código. Para quienes trabajan en Haskell, ofrece una alternativa práctica a las herramientas más tradicionales, con un coste de configuración inicial que merece la pena.