Haskell 作為一個冷門語言,并沒有一個簡單好用傻瓜式的 IDE。所以筆者記錄了自己搭建環(huán)境的過程,希望對大家有所幫助。
準備工作
- 一個好的網(wǎng)絡環(huán)境,至少與 GitHub 保持通暢連接
- Homebrew
開發(fā)環(huán)境的搭建
編譯器(GHC)、解釋器(GHCI)等 Haskell 工具鏈
在筆者踩過無數(shù)坑之后,無腦推薦Haskell Stack,喜歡挑戰(zhàn)的讀者可以自行嘗試使用 GHC+GHCI+Cabal開發(fā)環(huán)境
brew install haskell-stack
編輯器
目前主流的編輯器有 vim, emacs, sublime, atom, visual studio code 等,筆者平日開發(fā)中只在修改配置文件或者替換某個字符串時用到它們故先按下不表。
IDE
因為宇宙最強 IDE——Visual Studio在 Mac 上發(fā)力較晚并表現(xiàn)不佳,故筆者建議使用IntelliJ IDEA(雖說筆者非常討厭 Java 這門語言,但是不得不承認 Java 寫出來的工具還是有不少好用的)
HaskForce
IntelliJ IDEA 有兩個第三方插件提供了對 Haskell 的支持,筆者建議使用評分較高的HaskForce,目前這款插件已經(jīng)無人維護(存疑,但也側(cè)面反映了 Haskell 社區(qū)的現(xiàn)狀)
-
安裝
- 在 IntelliJ IDEA 中按下 ? + , 進入偏好設(shè)置界面
Plugins > Browse repositories > HaskForce
-
使用
由于 HaskForce 插件自身的局限性,需要在終端中通過 Haskell Stack 創(chuàng)建項目。stack new 項目名稱 模版名稱 路徑(默認當前路徑)cd 項目名稱stack setupstack build
注意如果在創(chuàng)建項目中提示參數(shù)不足的警告,可以在~/.stack/config.yaml 中配置
templates:
params:
author-name: your-name
author-email: your-email
copyright: "Copyright (c) 2018 0x11901"
github-username: "0x11901"
category: categories
不建議在此寫死模版名稱,如果不是很確定要用什么模版,可以在新建項目時傳 simple
- 使用 IntelliJ IDEA 導入創(chuàng)建的 Haskell Stack 項目
- 路徑選擇項目的根目錄,注意一下是不是選擇了 Stack 模塊
- 然后一直下一步
- 配置下 configurations
> add > Haskell Stack Run > Executable: 項目名稱- Executable 一定要填寫
- 點擊 run 就能運行你的 Haskell 程序了!
相關(guān)工具
如果僅僅只有這些雖然就能愉快的編碼了,但是筆者認為是完全不夠的。畢竟如果沒有代碼格式化工具和靜態(tài)代碼分析工具,筆者是不會寫代碼的。所以怎么能少了這些呢?。?!
剛好 HaskForce 整合了 hlint, ghc-mod, hindente 等相關(guān) Haskell 工具,可以很好地與 IntelliJ IDEA 結(jié)合。它們的安裝也十分簡單,可以直接使用 Haskell Stack 安裝,當然 hlint 也可以使用 Homebrew 安裝,不過筆者建議使用統(tǒng)一的安裝方式方便將來管理。
stack install hlint hindente stylish-haskell
其中 ghc-mod 的安裝值得特別說一下,目前新建的 Haskell Stack 工程默認的 resolver 是 lts-11.6 , 其 GHC 的版本號是 8.2.2 , 而 ghc-mod 的主工程由于技術(shù)問題一直沒有支持這套環(huán)境,所以想要成功編譯出來是很麻煩的。所以如果大家想使用這款令人愉悅的黑客工作,可以按照下列步驟來編譯。
1. 推薦建立一個獨立的目錄來存儲接下來要使用的文件,編譯完成后即可刪除
2. cd 你剛剛建的目錄
3. git clone https://github.com/DanielG/ghc-mod.git -b ghc802
4. git clone https://github.com/DanielG/cabal-helper.git
5. cd ghc-mod ; touch stack.yaml
因為通過 Haskell Stack 來編譯 ghc-mod 需要配置一個 stack.yaml , 所以用你最喜歡的編譯器打開 stack.yaml 并寫上下面的內(nèi)容:
resolver: lts-11.6 # current resolver
packages:
- location: .
- location: ./core # seems like ghc-mod-core got integrated
- location: ../cabal-helper
extra-dep: true
extra-deps:
- extra-1.6.6 # escapeJSON was missing with 1.5.3
- monad-journal-0.7.2
- optparse-applicative-0.13.2.0
- unix-compat-0.4.3.1
- either-4.4.1.1
- cabal-plan-0.3.0.0
flags: {}
extra-package-dbs: []
allow-newer: true # so it builds / too lazy to pinpoint exact versions
現(xiàn)在在當前目錄使用 stack install 命令即可正常編譯出 ghc-mod 與 ghc-modi 并會被放在 ~/.local/bin 目錄下,你可以將這個目錄加入 shell 的環(huán)境變量中也可以把它們移到已經(jīng)加到 shell 的環(huán)境變量的目錄下。
最后打開 IntelliJ IDEA 的進入偏好設(shè)置界面界面,找到 Haskell Tools 一欄,然后找到你想要使用的工具,點擊 Auto Find 按鈕然后確認,就能在 IntelliJ IDEA 使用這些工具了!
Haskell IDE Engine
筆者最近在 GitHub 上發(fā)現(xiàn)了這個新項目,相對于 HaskForce 無人維護的狀態(tài),該項目正在如火如荼地開發(fā)中。正如該項目介紹所說,這款 Haskell 引擎筆者分析集成了上述所說的所有工具,而且安裝配置更加傻瓜化??紤]到維護性,筆者建議考慮配置 Haskell 環(huán)境的同學應使用這個解決方案。
Haskell IDE Engine 與 Visual Studio Code 集成
從 Haskell IDE Engine 的介紹中可以看出,作者是按照“編輯器 + HIE”這種模式來設(shè)計的,故這次筆者嘗試了 Haskell IDE Engine + Visual Studio Code 的組合。選擇 Visual Studio Code 的原因主要是免費,畢竟筆者很窮。
他們的集成也很簡單:
先從 VSCode 市場 安裝 Haskell Language Server ,然后再自行編譯 HIE。
可以根據(jù)自己所用的 GHC 版本選擇編譯 HIE , 但是根據(jù) Haskell Language Server 的說法,建議全部編譯,故筆者選擇全編譯:
git clone https://github.com/haskell/haskell-ide-engine --recursive
cd haskell-ide-engine && make build-all
- 需要你的 Haskell Stack version >= 1.7.1
- 一個流暢的網(wǎng)絡
編譯成功后二進制文件會放在 ~/.local/bin,建議將這個路徑加入到 $PATH 中。
最后只需要打開 VSCode 的偏好設(shè)置,在 JSON 中配置一下即可,具體可以看一下 Haskell Language Server 的文檔,基本上默認的配置就可以,但是也有 "languageServerHaskell.useHieWrapper": true 字段可以選擇打開,如果你沒有把 HIE 的二進制文件加入 $PATH 中,還需要配置 "languageServerHaskell.hieExecutablePath": "" 字段。
現(xiàn)在就能使用 VSCode 愉快地擼碼了。
后記
Haskell IDE Engine 還支持很多編輯器,適應性很廣。雖說現(xiàn)在用起來不如 HaskForce + IntelliJ IDEA 的組合,但是已發(fā)展的眼光來看,未來應該是 Haskell IDE Engine 占主流地位的。所以筆者建議大家都可以試試,總之目前用著還是比較滿意的,以上。