Я вношу вклад в 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
, или есть лучший способ справиться с этим?