我为Alex做出了贡献,它显然取决于许多库,并且应该针对许多版本进行编译。
我需要使用仅GHC 7.6.1可用的函数才能更好地处理错误。所以我想使用#if ...
导入所说的函数,否则,我将以不同的方式处理错误。
我看过一些:
#if __GLASGOW_HASKELL__ >= 610
import Control.Exception ( bracketOnError )
#endif
所以我做了:
#if __GLASGOW_HASKELL__ >= 761
import Text.Read ( readMaybe )
#endif
考虑到
761
是GHC版本7.6.1
的别名,即使我使用cabal软件包并尝试使用它,也无法导入该函数,即使我使用的是Glorious Glasgow Haskell编译系统,即版本7.8.4 。因此,在使用程序进行尝试之后,我发现
7.8.1
在__GLASGOW_HASKELL__
中标识为708
。{-# LANGUAGE CPP #-}
module Main where
#if __GLASGOW_HASKELL__ == 708
ver = "==708"
#else
ver = "/=708"
#endif
main = putStrLn $ ver
并运行它:
$ runhaskell if.hs
==708
我怎么知道应该为
7.6.1
使用什么值,或者有更好的方法来解决这个问题? 最佳答案
GHC用户指南的section 6.11.3.1中对此进行了描述:
对于GHC的x.y.z
版本,__GLASGOW_HASKELL__
的值是整数⟨xyy⟩(如果⟨y⟩是一位数字,则添加前导零,例如,在GHC的6.2版中为__GLASGOW_HASKELL__==602
)。有关更多信息,请参见GHC version numbering policy。
因此,对于7.6.1
,您将检查__GLASGOW_HASKELL__ >= 706
。原因是像7.10.x
这样的版本。
关于haskell - GHC版本 checkin 代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28292476/