2011-06-12 34 views
4

最近我一直在使用Scala和SBT。 REPL循環有一個方便的功能:~ COMMAND,意思是爲項目中的每個源文件更改執行COMMAND。例如:Haskell構建生態系統中的類SBT功能

~ test 

~ compile 

是快速發展得不得了有用。我想知道,有沒有人知道類似於Haskell,一個cabal shell,也許?

回答

9

你可以很容易地使用inotifywait得到這樣的東西。

剛啓動終端在您的項目目錄,並運行是這樣的:

$ while inotifywait -qq -r -e modify .; do cabal build && ./dist/build/tests/tests; done 

這也適用於任何其他語言;只需插入您選擇的構建命令即可。

+0

非常實用;謝謝。 – troutwine 2011-06-13 03:15:56

3

你可以腳本ghci既定義你自己的命令,並增加現有的命令。要做到這一點:

有關GHCi :def命令的更多信息,請參閱here

+2

我覺得這有點不對。目標是循環在源變化時觸發的任意cabal命令;通過GHCi實現這一目標似乎落後。例如,GHCi知道「cabal test」是什麼?相當於SBT的「cabal-shell」略高於GHCi宏; cabal有比GHCi更多的項目信息,不是嗎?謝謝你的資源,一切都一樣。 – troutwine 2011-06-12 18:13:48

+0

啊,好的。所以這有點不同。是的,通過inotify和cabal構建連接可能會很有趣。 – 2011-06-12 18:29:36

+0

太棒了;很高興知道。 – troutwine 2011-06-12 18:35:38

3

ghcid項目提供限於~ :reload的東西。它提供了一些額外的功能(格式爲固定數量的行,堅持來自以前加載的文件的警告),但不是運行任何命令的一般性。