Haskell 在 macOS 下的環(huán)境搭建

Haskell 作為一個冷門語言,并沒有一個簡單好用傻瓜式的 IDE。所以筆者記錄了自己搭建環(huán)境的過程,希望對大家有所幫助。

準備工作

  1. 一個好的網(wǎng)絡環(huán)境,至少與 GitHub 保持通暢連接
  2. 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)狀)

  • 安裝

    1. 在 IntelliJ IDEA 中按下 ? + , 進入偏好設(shè)置界面
    2. Plugins > Browse repositories > HaskForce

  • 使用
    由于 HaskForce 插件自身的局限性,需要在終端中通過 Haskell Stack 創(chuàng)建項目。

    1. stack new 項目名稱 模版名稱 路徑(默認當前路徑)
    2. cd 項目名稱
    3. stack setup
    4. stack 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 項目
  1. 路徑選擇項目的根目錄,注意一下是不是選擇了 Stack 模塊
  2. 然后一直下一步
  3. 配置下 configurations
  4. > add > Haskell Stack Run > Executable: 項目名稱
  5. 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 占主流地位的。所以筆者建議大家都可以試試,總之目前用著還是比較滿意的,以上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容