Haskell_Setup

Haskell安装踩坑记录

Haskell因为其很多数学特性被广泛应用于开发中,其很多特点都和sagemath类似,但也有很多不同:

https://gitee.com/alekseyp/picgo/raw/master/img/202307260019472.png

在刷大佬的]仓库时https://github.com/cpeikert/Lol认识了haskell,发现这么牛逼的语言的第一反应是下下来玩玩,于是有了这篇文章。

本文是基于csdn文章https://blog.csdn.net/Nanzhan_17/article/details/123348982实现的,最终效果如图:

https://gitee.com/alekseyp/picgo/raw/master/img/202307260021991.png

image-20230726002150951

基于vscode实现了haskell的编译运行。

0x1 安装Stack

打开https://docs.haskellstack.org/en/stable/,选择Windows 64-bit Installer进行下载。

安装过程中,还会自动将Stack添加到用户环境变量 PATH 中,同时会设置 STACK_ROOT=C:\sr(安装程序的默认选项,记住这个路径,后面要考),安装完成后,可以在cmd终端输入命令“stack –help”来检验安装是否成功。

0x2 安装GHC

2.0 辅助理解的概念

  • Hackage是Haskell社区的开源软件包仓库 The Haskell Package Repository ,可以发布库和程序,或者使用Cabal-install这样的软件包管理器下载和安装软件包。
  • Stackage是 Stable Haskell package sets 的缩写,即稳定一致的Haskell包集合。它是一个Haskell软件包子集的发行版,来自Hackage并和它一同被社区构建起来。Stackage存在的意义在于,它提供了兼容一致且稳定的Haskell包集,每个包都选择了一个特定版本以满足软件包集合的自洽性,从而解决包版本的冲突问题、顺利构建和运行项目。
  • Stackage提供和维护了一堆不同的大版本,每个大版本都对应一个兼容一致稳定的Haskell包集,或者说是一个LTS Long Term Service ,被社区长期支持。我们选定了一个LTS之后,在下载安装时只可能发生某个包不存在的情况,就算出现冲突也能通过Stack来轻松解决,不会埋下一大堆“地雷”。

2.1 配置stack

在cmd终端执行stack install,直接报错寄掉。

这是因为下载过程中的一个网址需要翻墙才能访问,在不翻墙的情况下,需要进行换源才可以下载成功。

后面的没看了,不就是翻墙吗,直接打开clash里的终端,直接开梭。

https://gitee.com/alekseyp/picgo/raw/master/img/202307260026866.png

image-20230726002631839

就是terminal点进去,记得用管理员权限运行

后来复盘发现stack install根本没什么卵用,怎么搞都报错,直接不管跳下一步还没bug,于是直接开摆。

运行stack --resolver lts-18.27 setup,完成后运行stack exec -- ghc --version验证是否成功

1
stack exec -- ghc --version

这时候运行stack exec -- ghci,就可以在交互式状态下初体验haskell咯

1
2
3
4
5
6
7
8
stack exec -- ghci
GHCi, version 9.4.5: https://www.haskell.org/ghc/ :? for help
ghci> 2 + 15
17
ghci> 5/2
2.5
ghci>:q
Leaving GHCi.

0x3 配置vscode

3.1 安装插件

由于VSCode中的一部分插件版本过老,和新版本的GHC不匹配,因此下载旧版本的GHC做备用,一般来说LTS9不会出现冲突。

在终端执行以下命令进行安装,并检测安装是否成功:

1
2
stack --resolver lts-9.21 setup
stack --compiler ghc-8.0.2 exec -- ghc --version

配置完成后,在VSCode扩展中安装以下插件:

1
2
3
4
5
6
Haskell ghc-mod
Haskell-linter
Haskell Syntax Highlighting
Haskelly
Haskell
Code Runner

然后在终端配置插件,分别执行以下命令(这一步所需时间较长,如果一次没配置完,第二次重新打开终端时,需要重新输入chcp 65001)

1
2
3
4
5
chcp 65001
stack --resolver lts-9.21 install ghc-mod
stack --resolver lts-9.21 install hlint
stack --resolver lts-9.21 install intero QuickCheck stack-run

以上这些安装完成后,终端显示如下,不用管那个Warning,但是要记住他那个路径 C:\Users\Alexei_P\AppData\Roaming\local\bin,Stack安装的所有扩展应该都在这个路径中,这个路径在配置settings.json时需要用到。

3.2 Haskell+VScode

3.3 配置ghc-mod、hlint、Code Runner

打开vscode的settings.json,加入以下代码:

1
2
3
4
5
6
7
8
9
/* Haskell ghc-mod配置 */
"haskell.ghcMod.executablePath": "stack",
/* Haskell-linter配置 */
"haskell.hlint.executablePath": "C:\\Users\\hp\\AppData\\Roaming\\local\\bin\\hlint.exe",
/* code-runner配置 */
"code-runner.executorMap": {
"haskell": "cd $dir && stack runhaskell $fileName"
},

0x4 配置Haskell

把以下代码加到Haskell安装文件夹下的stack.yaml中:

1
2
3
ghc-options:
'$everything': -haddock # 一个从带注释的Haskell源代码自动生成文档的工具

0x5 尝试使用

1
-- 1.hs{-    hello world-}add :: Integer -> Integer -> Integeradd x y = x + ymain = do   putStrLn "The addition of the two numbers is:"   print(add 2 5)

终端输入stack runhaskell 1.hs

成功输出