我正在为 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
使用什么值? ,或者有更好的方法来解决这个问题吗?
最佳答案
这在 section 6.11.3.1 中有描述GHC 的用户指南:
For version
x.y.z
of GHC, the value of__GLASGOW_HASKELL__
is the integer ⟨xyy⟩ (if ⟨y⟩ is a single digit, then a leading zero is added, so for example in version 6.2 of GHC,__GLASGOW_HASKELL__==602
). More information in GHC version numbering policy.
所以对于
7.6.1
, 你会检查 __GLASGOW_HASKELL__ >= 706
.原因是像 7.10.x
这样的版本。 .
关于haskell - GHC 版本检查代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28292476/