<rt id="aausj"><meter id="aausj"></meter></rt>

  • <b id="aausj"></b>

      使用 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庫

      拷貝庫到指定位置

      標簽: STACK DOCKER HASKELL CABAL

      [責任編輯:]

      最近更新

      天王国际