2014-12-25 25 views
5

我傾向於反覆在終端中對我的程序進行類型檢查,同時在我選擇的編輯器中修改它們以獲得實時反饋。我通常運行類似於:watch -d -n 1 "ghc -fno-code NoIncompletePM.hs"ghc在使用`no-code`標誌時不會報告非詳盡的模式匹配

不幸的是,我用來避免編譯我不在乎的代碼的no-code標記似乎與warn-incomplete-patterns不兼容。例如。有了這個程序:

{-# OPTIONS -Wall    #-} 
module NoIncompletePM where 

argh :: Bool -> Bool 
argh True = True 

我從來沒有得到任何警告,argh缺失的情況下,爲False。通過刪除no-code標誌標誌添加force-recomp(這樣警告顯示每一次,而不僅僅是第一次編譯),但我確切地想要避免編譯這個是可能的代碼...

我在手冊中找不到任何描述這些不兼容的東西,所以我猜測它可能是意外的行爲,或者我做錯了什麼。任何線索?

+0

小問題:1)當您不修改代碼時,使用'watch'輪詢看起來不是最理想的。你可以編寫自己的工具,它只有在源碼改變時才運行ghc:在這種情況下,你可以保留舊的信息,從而不需要「強制重新編譯」。 2)Emacs Flymake完成你正在做的事情(我不知道它傳遞給ghc的標誌 - 它可能會生成代碼)。我很確定還有其他編輯以及相同的功能。 3)影響警告的'no-code'看起來確實是錯誤的,但我無法複製它。 – chi

回答

1

這是一個已知的bug GHC:

https://ghc.haskell.org/trac/ghc/ticket/8101

請注意,如果您通過-c標誌一個觸發模式,那麼你得到警告。所以這是目前的解決方法。

不幸的是,看起來(https://ghc.haskell.org/trac/ghc/ticket/10600)ghc 8.0可能會在一次性模式下重新開始工作,至少在一次發佈週期內仍然如此。

+0

我已經開始使用'ghcid',但我對這個解決方案並不完全滿意,所以我很高興知道有一個解決方法。謝謝! – gallais