使用 Docker 搭建 Haskell 开发环境
2023-01-17 23:50:13 来源: 哔哩哔哩
最近又又又又开始学习 Haskell,之前学习的时候都使用单文件的形式,这对使用第三方库产生了很大的障碍(最终也没学下去),最近研究了通过 Docker 去配置 Haskell 环境的方式(应也适用于linux),这里记录一下,并且同时也去使用 Stack 创建空项目和 Yesod 项目、配置plfa环境。
前置条件:
(资料图片仅供参考)
安装 Docker
安装 VS Code,以及 Dev Containers 扩展
闲
创建 linux 容器,安装依赖
首先要创建 linux 容器,使用 fedora 做例子:
我曾尝试过 ubuntu镜像,但其在创建 Yesod 项目的时候遇到奇怪的编码问题(表现在编译language-javascript库时getContents报错),应该是系统区域相关的玩意被裁剪的原因
然后打开本机的 VSCode,点击左下角蓝色图标,选择 Attach to Running Container,选择该容器。
打开后,参考https://mirrors.ustc.edu.cn/help/fedora.html,执行:
安装 Ghcup,修改 Ghcup,cabal,stack 源
参考https://mirrors.ustc.edu.cn/help/ghcup.html。
首先安装 ghc 所需依赖:
执行下面的命令,一路 y 下去:
如果上面这个命令出现了奇怪的错误,或许得使用官方的脚本(注意网络):
安装后,尝试执行 ghci:
bingo!
配置 Ghcup,Cabal,Stack 源
这节参考https://mirrors.ustc.edu.cn/help/ghcup.html,https://mirrors.ustc.edu.cn/help/hackage.html,https://mirrors.ustc.edu.cn/help/stackage.html。
(用 vi 或者 VSCode)编辑~/.ghcup/config.yaml
,添加:
编辑~/.stack/config.yaml
,添加:
编辑~/.cabal/config
,找到repository hackage.haskell.org
一行,编辑为:
然后执行下列命令:
使用 Stack 创建项目
执行stack new project-name
可以创建空项目,创建后进入该文件夹,执行stack build
检查是否正常。
执行stack build
若出现”Could not load module ‘Distribution.Simple’”的错误,移除~/.ghc/相应版本 GHC/environments/default
应当能解决,参照https://stackoverflow.com/questions/70994294/problem-with-loading-module-distribution-simple。
给 VSCode 安装 Haskell 扩展,打开项目目录并打开特定 hs 文件就应当可以开始编码了,可以尝试打开 src/Lib.hs 文件,起空行输入-- >>> show "Aloha"
,若出现 Evaluate 按钮则证明工作正常。
添加依赖
添加依赖时不要使用 cabal,可能会出现上一节的问题
但这还不够,如果能识别到 Stack 项目的依赖并给与补全才更好。
编辑 package.yaml,在 dependencies 配置下加入 random 依赖:
然后,执行stack build
,在另起一个文件 Playground.hs,添加下添加下列内容,导入所有所需依赖并点击 Evaluate:
不管你能不能跑,反正我是能跑了 w。
使用 Stack 创建 Yesod 项目
参考https://www.yesodweb.com/page/quickstart,执行 stack build
的时候会出错,查询日志发现缺失 zlib 头文件,使用 dnf 安装zlib-static
, zlib-devel
两个依赖即可。
执行完毕后,创建文件src/HelloWorld.hs
,粘贴下面的代码(这类型安全的html模板和路由定义,震撼):
然后,执行stack runhaskell src/HelloWorld.hs
,在本机访问localhost:8080
,若能成功访问,bingo!
配置plfa环境
参考https://agda-zh.github.io/PLFA-zh/GettingStarted,以及https://schneide.blog/2020/09/21/compiling-agda-2-6-2-on-fedora-32。
执行下面的命令去:
安装git
对一个系统库进行链接(Haskell为什么这么麻烦?)
安装agda
获取agda标准库和plfa库
拷贝库到指定位置
[责任编辑:]
猜你喜欢
- (2023-01-17)使用 Docker 搭建 Haskell 开发环境
- (2023-01-17)全球速看:格局打开了,小米11系列这次做到位了,网友:这算不算双赢?
- (2023-01-17)迪瑞医疗(300396)1月17日主力资金净买入1596.88万元
- (2023-01-17)环球快看:全球顶尖港口运营商DP World:集装箱运费还将大跌近两成!
- (2023-01-17)全球简讯:同花顺(300033)1月16日主力资金净卖出552.48万元
- (2023-01-16)2023重庆梁平春节花灯民俗节烟花表演时间+地点
- (2023-01-16)注意!合肥城建:吴前求先生计划减持公司股份累计不超过4365股 全球速看料