我正在使用Stack从命令行设置,构建和运行我的Haskell项目 . 我想使用IntelliJ作为我的IDE,但是遇到了将Stack配置为我的构建工具的问题 .
我使用Stack在命令行上按照堆栈User Guide中的指令创建并运行"Hello, World" Haskell程序 . 一切都很好 .
我在IntelliJ上安装了HaskForce插件 . 构建,执行,部署 - >编译器 - > Haskell编译器选项卡为您提供了使用Stack构建和使用Cabal构建之间的选择 . 我选择使用堆栈构建并像这样配置它 .
我可以使用Haskell Stack Run配置运行项目 . 控制台输出是正确的 .
/Users/williammcneill/Library/Haskell/bin/stack exec hellohaskell-exe --
Hello, Haskell.
但是,我无法弄清楚如何通过IDE重建项目 . 例如,如果我更改输出文本并重新运行程序,我仍然会看到原始的“Hello,Haskell”输出 . 构建 - >制作项目|制作模块|重建项目都无所事事 .
项目设置 - >工件选项卡没有列出任何内容,我没有看到在这里添加Haskell可执行文件的方法 .
我的解决方法是从命令行构建我的Haskell程序,即使我正在从IDE进行编辑 .
(在一般的Haskell编译器设置中指定项目特定的 stack.yaml
文件的路径对我来说也很奇怪,但这是我能看到如何使用Stack构建的唯一方法 . )
如何设置IntelliJ以使用Stack构建Haskell项目?
ghc 7.10.3,堆栈1.1.2,HaskForce 0.3-beta.33,IntelliJ IDEA Ultimate 2016.1.3,OS X 10.11.5
这是Haskforce issue 282 .
2 回答
如果你想点击IntelliJ运行按钮来运行项目并使用Stack,我认为你应该使用IntelliJ Haskell Plugin作为@mrek说 . HaskForce plugin此刻说
所有内容的安装说明(从安装Stack到项目设置)都在readme中,但我需要稍微更改一下,所以我把我的版本放在这里 .
Installation instructions for everyone who wants to use Haskell
安装IntelliJ-Haskell插件,您可能希望从GitHub安装最新的beta版本 .
安装堆栈,their docs.中的说明
在终端/命令提示符下,运行
stack install hindent
和stack install stylish-haskell
(这可能需要一段时间) .在IntelliJ中,打开了任何项目,在File |中设置| Haskell提供了hindent和Stylish-haskell的路径,如安装命令的输出所示 . 在Windows上,例如可能
C:\Users\username\AppData\Roaming\local\bin\hindent.exe
和C:\Users\username\AppData\Roaming\local\bin\stylish-haskell.exe
,在Linux上可能是/usr/local/bin/hindent
.重新启动计算机 .
在类型为Haskell模块的IntelliJ中创建一个新项目,选择Stack二进制文件(可能再次为
C:\Users\username\AppData\Roaming\local\bin\stack.exe
)和Set Default .使用File |打开额外的日志设置|外观|通知|哈斯克尔日志 . 当构建需要很长时间的东西时,您可以在此处看到进度(右下角,事件日志) .
你应该有一个文件
app/Main.hs
. 您可以使用main = putStrLn "Hello Haskell!"
替换其中的所有内容 .现在按照@mrek的说法:创建一个运行配置Haskell Stack | Haskell Stack Runner,然后运行它 . 您应该看到问候消息 .
更好的是,回答原始问题:当您更改消息并再次运行时,输出已更改!
以同样的方式,您可以进行运行测试的测试运行配置(Haskell Stack Tester) .
您可以通过单击IntelliJ底部的终端然后运行
stack ghci
来启动交互式控制台 . 当您键入main
时,您正在调用main,依此类推 . 您也可以使用stack test
而不是测试运行配置 .我想你已经安装了IntelliJ Haskell plugin .
现在,您应该能够构建项目 .
输出:
/usr/local/bin/stack build --exec test-project-exe It works!