使用 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股 全球速看料