haskell - GHC 版本检查代码

标签 haskell ghc

我正在为 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/

相关文章:

haskell - 在 GHCi 中获取评估时间

haskell - 在 Haskell 中使用表情符号

parallel-processing - 如何强制某组目标始终按顺序运行?

haskell - TChan 写入是否集成到 Haskell STM 中?

haskell - 将多个 C 目标文件加载到 GHCi 中

pointers - 使用 Struct 库的快速命令式指针(静态、拆箱等)

haskell - 具有更大域的 Euler #4

haskell - Haskell中GHC.Prim中的 "let x = x in x"和 "data Float#"是什么意思

haskell:在 haskell 平台 2013 2.0.0 中使用 writer monad 时,没有 (Monoid Int) 的实例

haskell - Haskell 中的级别顺序