VS Code相較其它“企業(yè)級”IDE來說顯得簡潔,它支持所有操作系統(tǒng)晴裹。最重要的是涧团,你可以將你所喜愛的語言和編輯器用VS Code輕易地集成在一起经磅。
搜索擴展(extension)预厌,點擊安裝轧叽,一切就OK了刊棕。到目前為止鞠绰,我在VS Code中毫無障礙地使用了JavaScript、Elm牺荠、Purescript休雌、ReasonMl肝断、F# 和 Python杈曲。語言類擴展普遍十分優(yōu)秀,其中胸懈,F(xiàn)#的Ionide插件令我印象深刻担扑。
一旦你能熟練地使用編輯器編寫你所擅長的語言,那么開始探索一門心儀已久的編程語言是件相當簡單的事趣钱。下面就讓我們開始吧涌献!
這篇教程的所有代碼可以在這里找到
The Haskell Tool Stack
Haskell VS Code extensions的操作說明并不會告訴你太多關于如何建立一個Haskell environment的信息。它會提及Cabal 和 GHCI兩個名詞首有,Haskell官方文檔關于Cabal和沙盒的說法也只會讓你一頭霧水悄谐。
幸運的是卵牍,Haskell Tool Stack是一個開始Haskell的簡單選擇。我們將通過homebrew來獲得它靴寂,請確保Xcode處于最新版本烙常,在終端輸入以下內容:
brew install haskell-stack
隨即開始一個新項目:
stack new my-project
cd my-project
stack setup
setup命令會下載編譯器到一個單獨的位置轴捎,這樣不會和系統(tǒng)中其它Haskell的啟動器相沖突。現(xiàn)在可以啟動VS Code了军掂。
code .
注:VS Code內shift + command + p輸入shell code
以啟動命令行設置
From Editor to IDE
當?shù)谝淮未蜷_stack配置的項目文件時轮蜕,VS Code會呈現(xiàn)一種比較普通的文件模樣。
讓我們給它打扮一下蝗锥!
第一個擴展是syntax highlighter跃洛,點擊安裝并重載后,平淡的文件看起來順眼多了
Linting Extension
繼續(xù)美化代碼终议,下一個安裝的擴展是基于hlint的代碼檢查工具linter汇竭,它能提供讓代碼更簡化和增加可讀性的建議
安裝后你可能會看見以下錯誤:
好吧葱蝗,我們需要做一點配置工作讓linter extension生效
stack install hlint
..
Copying from /Users/{yourusername}/.stack/snapshots/x86_64-osx/lts-7.9/8.0.1/bin/hlint
to /Users/{yourusername}/.local/bin/hlint
Stack會把hlint包拷貝到 ./local/bin目錄下,但是VS Code設置文件的hlint的路徑指向了hlint
我們需要在~/.bash_profile中添加路徑 ~/.local/bin细燎,隨便用什么編輯器打開.bash_profile新增下列行
export PATH=$PATH:~/.local/bin
重啟VS Code两曼,瞧!它生效了玻驻。
Language Server
Haskell Language Server 會增加一系列我們所期望的現(xiàn)代開發(fā)環(huán)境具有的特性悼凑,比如 type information, function definitions, jump to definition, case-splitting等等。
但是璧瞬,在安裝這個插件之前户辫,我們需要安裝與Stack初始化的項目版本相適應的 haskell-ide-engine。首先嗤锉,檢查一下項目文件使用了哪個版本的編譯器
stack ghc -- --version
The Glorious Glasgow Haskell Compilation System, version 8.6.4
Stack為我們配置了8.6.4版本的編譯器渔欢。切換目錄,根據(jù)項目下載haskell ide engine
cd ..
git clone https://github.com/haskell/haskell-ide-engine --recurse-submodules
cd haskell-ide-engine
需要對應version 8.6.4編譯器的haskell ide engine瘟忱。這看上去會花上一些時間奥额,至少在我的機器上是如此,所以在運行下列命令前泡好咖啡吧访诱。
stack ./install.hs hie-8.6.4
stack ./install.hs build-doc-8.6.4
最終我們可以安裝實際的插件了
切換到我們的代碼文件垫挨,鼠標停留時,應該會看見下面關于IO monad 的信息盐数。炒雞開心棒拂!
Debugging Extension
最后一個要安裝的擴展為我們的Haskell項目提供debugging。所以趕緊回到目錄下安裝吧玫氢。
cd ../my-project
stack install phoityne-vscode
Testing out the Debugger
為了測試debugging extension需要安裝測試環(huán)境帚屉。通過stack命令開始我們的test suit。
stack test
...
Test suite not yet implemented
By default our Spec.hs file simply prints to the console that we haven’t set anything up yet.
Let’s fix that using the advice from this article.
首先我們改動package.yaml漾峡,在依賴部分增加 hspec
然后用新依賴build一下
stack build
接下來攻旦,用下面的選項替換Spec.hs文件的所有東西,它會自動在test suite中尋找并運行所有spec文件
{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
因為某些原因生逸,我在運行hspec-discover時報錯了牢屋。按照這個issue的建議解決了,然后安裝hspec-discover到全局
stack install hspec-discover
用下面的SpecHelper.hs 文件集中所有在test suite的依賴
創(chuàng)建一個我們想測試結果的函數(shù)
最終槽袄,通過實際的Spec 模塊來測試函數(shù)輸出
我們的項目樹如下烙无。記住,不同于F#遍尺,Haskell需要與模塊聲明對應的文件夾截酷。
運行測試結果如下
在spec file中得到 debugging信息,點擊VS Code的debug按鈕選擇haskell-debug-adapter乾戏,在MathSpec文件中增加斷點迂苛,按F5開始debugging三热。
注意,這個項目的所有代碼在這里.
Now We’re Ready to Learn Haskell
僅僅是安裝環(huán)境和舒適的工具鏈便能造成學習一門新的編程語言的許多困難三幻,還好VS Code這款熟悉的編輯器讓我們把精力集中于語法和概念而非工具和工作流就漾。
所以為什么要特地學習Haskell呢?
因為Haskell能使我們成為更好的編程者念搬。Haskell提供解決問題的多種視角并且讓強迫我們思考副作用的危害抑堡。這可能會讓人望而卻步,但是過一段時間锁蠕,你會發(fā)現(xiàn)我們曾經依賴的mutations, hidden side effects, iteration才是可怕的夷野。
Have fun!
文章翻譯自medium
作者:Matthew Doig
原文地址:setting-up-haskell-in-vs-code-on-macos
可能遇到的問題:Installing HIE on Mac fails