在 VS 代码中使用 Haskell

Using Haskell with VS Code

我无法让我的 VS 代码显示 Haskell 类型悬停。此外,没有自动完成功能。我所看到的只是一个小的空框,就在我用鼠标悬停的元素上方(请参阅 "getArgs" 函数右侧的小框)。

我使用的扩展名是 "Haskelly",尽管我也尝试过 Atom 编辑器的扩展名并且结果相似。

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

免责声明:我是 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:

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

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

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

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

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

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

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

编辑 2021 年 1 月 12 日

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

这是一个 link 我的 NixOS 配置文件的回购: https://github.com/bratfizyk/dotFiles/tree/master/nixos

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

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

我会随着时间的推移更新存储库。