Folia
← 返回头版

一名开发者尝试在 Haskell 中引入语言服务器与热重载工具

一名开发者分享了其在 Haskell 开发中引入语言服务器(hls)及热重载工具组合的实践经验,旨在实现接近 Lisp 的交互式开发体验 1。该实践主要涉及通过 Emacs 内置的 Eglot 客户端连接 hls 以获取代码内省功能,并利用 Nix flake 与 direnv 进行依赖管理和环境沙箱化 1。

在代码热重载方面,作者使用 ghcid 监听源文件变化并自动重编译,同时结合 foreign-store 库在代码替换时保留进程状态 1。然而,这一工作流也暴露出若干问题:首先,ghcid 在 Nix 开发 shell 外无法正常工作,必须手动启动 Nix shell 1。其次,Eglot 与 hls 会增加编辑延迟,影响 Vim 命令的响应可靠性 1。最后,由于 ghci 一次只能跟踪一组源文件,作者将所有代码合并到一个可执行组件中 1。


评论