【问题标题】:Using Haskell with VS Code将 Haskell 与 VS 代码结合使用
【发布时间】:2018-09-09 11:04:36
【问题描述】:

我无法让我的 VS Code 显示 Haskell 类型的悬停。此外,没有自动完成功能。我所看到的只是一个小的空框,就在我用鼠标悬停的元素上方(参见关于“getArgs”函数的小框)。

我使用的扩展是“Haskelly”,虽然我也尝试过 Atom 编辑器的扩展,结果相似。

以前有没有人遇到过类似的问题? 我用:

  • VS 代码:1.27.1
  • ghc:8.0.2
  • ghc-mod: 5.8.0.0
  • 哈斯凯利:0.5.4
  • 内部:0.1.32
  • 操作系统:Linux Mint 19

免责声明:我对 Haskell 很陌生,所以可能是我在这里做了一些非常错误的事情。抱歉,还在学习中;)。

编辑:

正如评论中所建议的,我已切换到 Haskero 并设法取得了一点进展。有一个类型悬停,但它包含一些垃圾。

可能很重要的一件事:我正在关注本教程:https://www.youtube.com/watch?v=a7R-2vtPLDM,所以我使用 cabal,而不是 stack。这有关系吗?

编辑 2:

我尝试过使用堆栈,但结果更糟。 VS Code 扩展因以下代码崩溃:

The following GHC options are incompatible with GHCi and have not been passed to it: -threaded
Configuring GHCi with the following packages: MyProject

Warning: Didn't find expected autogen file:
         <path_to_project>/MyProject/.stack-work/dist/x86_64-linux/Cabal-2.2.0.1/build/autogen/cabal_macros.h

Warning: Didn't find expected autogen file:
         <path_to_project>/MyProject/.stack-work/dist/x86_64-linux/Cabal-2.2.0.1/build/MyProject-exe/autogen/cabal_macros.h
<home>/.stack/programs/x86_64-linux/ghc-8.4.3/lib/ghc-8.4.3/package.conf.d/package.cache: GHC.PackageDb.readPackageDb: inappropriate type (Not a valid Unicode code point!)


  Code: -32603 

编辑 3:

还是不行,但离得近了一点。对于内置值和在同一个包中,我可以看到漂亮的类型悬停。但是,当在其他模块中引用时,我看到模块中的值出现错误(即使它们彼此相邻并且一切都编译得很好):

有什么办法可以帮助解决这个问题吗?

【问题讨论】:

  • 我对@9​​87654325@ 扩展有更好的体验:“悬停类型”和自动完成功能都是开箱即用的。它还依赖于 Intero(它获取类型和自动完成),但似乎效果更好。
  • 好的 - 我已经向前走了几步,但又碰到了另一堵墙。内容已更新。
  • 这两个扩展只适用于使用 Stack 构建的项目。 Installation instruction for Haskero。确保stack build 正常工作,并使用stack build intero 安装Intero。之后应该工作。不要使用阴谋集团。
  • 好吧,我想还有一件事我不明白。我应该在我使用的每个项目中安装 intero,还是有办法“全局”安装一次?
  • 根据Haskelly documentation,intero 可以使用stack build intero 命令在本地安装,也可以通过stack install intero 全局安装

标签: haskell visual-studio-code ide code-completion


【解决方案1】:

作为最快的解决方案,我决定安装 Haskell IDE 引擎(HIE:https://github.com/haskell/haskell-ide-engine)并将其与 Atom 一起使用。虽然没有设法使用 VS 代码对其进行配置,但目前还可以。

【讨论】:

  • 您能否详细说明您在 atom 上安装的内容(cabal 或 stack、ghc 的版本等)。我尝试了同样的方法但没有运气(但在 VS 代码中运行 HIE - 主要是)。需要更好的关于“如何开始”的文档。
  • 我最近又试了一次,但这次没有运气。看起来 HIE 的变化非常迅速。我感到很遗憾,如此出色的语言缺少一种对初学者友好的开始方式。
  • 快速更新:我使用堆栈仅安装了 hie-8.6.5。确保所有必需的二进制文件都在 PATH 中可用有点麻烦,但最终我做到了。但是,它仅适用于我的简单案例,并且在使用更多真实应用程序时往往会崩溃。起初我试图从 VSCode Extensions 中读取错误消息,但随后辞职并开始在没有任何类似 IDE 支持的情况下开始编码(请参阅下面的帖子中的更多详细信息)。
【解决方案2】:

我知道这已经很久了,但我想分享我过去的经历。也许有人会利用它,而无需经历相同的问题列表。

在花了几个小时阅读文章并与不同的人交谈后,我得出了一个结论,即开始使用 Haskell 的最佳方式是......只是开始使用 Haskell。我安装了 ghc 平台和 cabal,使用 cabal 新式命令,这似乎就足够了。至少现在。另外,我决定使用 VSCode 和一个简单的语法高亮扩展。

我发现任何引入更多类似 IDE 功能的尝试都不太可能成功,因为 Haskell 是一种非常复杂的语言。 “hie”是一个不错的小主意,但它对我来说缺乏稳定性和可靠性——随着时间的推移,我学会了如何安装它,但对我来说,它只适用于简单的情况,并且在更实际的应用程序中崩溃。

最近我一直在尝试创建一个非常简单的 DB + Web API 应用程序,但我一直很难让这两个 monad 正确地相互通信。我认为无论如何都没有IDE可以为我做到这一点。当我发现很难写下函数的正确类型时,我使用“cabal new-repl”,加载我的模块,用“:t”检查所需的类型并尝试解密输出。不是一个完美的解决方案,但同样 - 足够好。

2021 年 1 月 12 日编辑

我在 Haskell 上花了更多的时间,我的理解也增加了。我搬到了 NixOS,它似乎可以很好地处理所有事情。

这是一个包含我的 NixOS 配置文件的存储库的链接: https://github.com/bratfizyk/dotFiles/tree/master/nixos

“按原样”使用它会安装启用 HIE 支持的 VS Code。 Youi 可能只需要安装 VS Code 扩展本身,因为我发现这个功能在 nix 中存在问题,但这是一个简单的过程。

显然,更改用户名:)。否则你会继续使用我的。

我会随着时间的推移更新 repo。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2013-10-03
    • 2011-02-18
    • 2013-07-19
    • 2021-05-27
    • 2014-11-19
    相关资源
    最近更新 更多