假設您有一個知道安全的模塊。如何以向後兼容的方式爲模塊啓用安全Haskell
您想在模塊本身中將其標記爲類似{-# LANGUAGE Safe #-}
的Safe Haskell,或者在cabal文件中將其標記爲Extensions: Safe
之類的內容。不幸的是,這些中的任何一個都會降低向後兼容性(即模塊不會在GHC < 7.2上生成)。
如果整個庫是安全的,你可以換擴展指令,在這樣的陰謀文件:
if impl(ghc >= 7.2)
Extensions: Safe
但是,這僅適用於整個庫。
如何將單個模塊作爲安全的Haskell向後兼容?
'{ - #語言CPP# - } ; #if __GLASGOW_HASKELL__> = 702; { - #語言安全# - }; #endif'? –
...我正準備提交一份完整的代碼。 @DanielFischer是對的;它可以工作,但它不適用於舊的GHC版本IIRC,因爲所有'LANGUAGE'編譯指示都必須位於當前的一個模塊中(因此,'CPP'在以下行中未能及時啓用') 。您還可以定義一個Cabal標誌,檢測GHC版本,並在編譯時有條件地使用完全不同的文件。 – dflemstr
@DanielFischer這正是我所期待的。謝謝。如果您發佈它,我會接受它作爲答案。 – scvalex