
上 Haskell 官網 Haskell官網。目前安裝 Haskell 最簡單的方式是透過官網提供的工具 GHCup
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
安裝完成後,下 ghcup tui ,可以進入 tui 介面。
使用方向鍵操作 tui 光標,移到要安裝的版本。
輸入 i 來安裝版本
輸入 s 來使用該版本
ghc 是 Haskell 的編譯器。
這次直接安裝撰文當下(20260208),推的 ghc 版本(9.6.7)。
Cabal 是 Haskell 的套件管理工具。使用撰文當下的推薦版本(3.14.2.0)。
HLS 是 haskell 的 langugae server, 安裝正確的版本後,使用 vs code
或任何支援 lsp 的編輯器,可以得到語言支援。
Cabal 是 Haskell 用來編譯和打包 Haskell 程式的系統。開發者可以透過 Cabal 初始化程式、管理依賴、編譯選項等等。
這邊我們使用撰文當下推的版本(3.14.2.0)。
Stack 是 Haskell 編譯環境的一層抽象,透過 Stack
可以產生基本的轉案架構、鎖定 ghc 版本、Cabel 版本、管理依賴版本等等及
編譯器選項等等。
在這裡我們也使用推薦的版本(3.7.1)
stack 和 cabal 做的事情有點重覆,但它們其實是為不同目的產生的工具。Stack 比 Cabel來說,更強調了專案的可重現性。它會鎖定 Haskell, Cabel 的版本, 並且根據 yaml 檔案自動管理專案的建置。 另外,stack cli 還整合了測試、執行、打包。以我的經驗,對初學角度來說,想要快速進入開發、學習Haskell,Stack 會是更簡單的選擇。
現在的haskell 生態圈流行使用
nix取代 stack 做為 haskell 的版本控管工具。不過nix 有點學習曲線,為了聚焦,這系列還是建議以 stack 為主開發。
使用以下指令:
stack new MyProject
它會之使用 template 產生一個全新的 haskell 專案。完成後進入 MyProject資料夾。
可以使用 stack run 執行程式。
新建一個專案目錄,並且在專案下執行cabal指令:
mkdir cabal-starter
cabal init
之後,cabal 會問一些基礎設定,照著填完,會在目錄內產生cabal 檔和簡單的 haskell 程式。
可以使用 cabal run 指令執行程式。
筆者使用 emacs + lsp mode + haskell mode ,但 emacs
學習曲線比較高,這裡不另外介紹。
一般開發可以使用 vs code,搭配 haskell language server,可以有大部份的語言支援。
LSP :: Couldn't find a working/matching GHC installation. Consider installing ghc-9.10.3 via ghcup or build HLS from source.
Github 能夠找到相關的issue (#3497, #3225)說明 HLS 的版本參照有點問題。嘗試使用 ghcup 手動編譯對應的 HLS 版本。
$ ghcup compile hls --git-ref master --ghc 9.10.3 --cabal-update
haskell-language-server-wrapper --probe-tools
另外,如果使用 stack 的話,如果看到有以下錯誤。
GHC ABIs don't match!
也可能是 stack 和 hls 的整合問題 #2984
最簡單的方式是直接把 stack.yaml 內的 system-ghc: true 註解關掉。