如何检查Haskell中的CPP编译指示?

时间:2017-10-25 10:05:37

标签: haskell preprocessor

我在程序中有这样的代码:

#if ( __GLASGOW_HASKELL__ >= 821 )
  ...
#else
  ...
#endif

但它没有按预期工作。很可能是因为我使用了错误的CPP pragma。所以我想知道是否有一些简单的方法可以检查已定义常量的值或评估CPP编译指示?

1 个答案:

答案 0 :(得分:2)

我相信您需要明确指定您打算通过LANGUAGE编译指示使用CPP进行预处理。

例如:

{-# LANGUAGE CPP #-}
module Main where

#if ( __GLASGOW_HASKELL__ >= 821 )
ver = ">= 821"
#else
ver = "< 821"
#endif

main = putStrLn $ ver -- < 821 on my machine

见:

编辑:

您应该能够在任何需要的地方使用预处理(我认为这个例子解决了项目中的&#34;值&#34;您在下面的评论中提到的要求):< / p>

-- Bar.hs
{-# LANGUAGE CPP #-}
module Bar(ver) where

#if ( __GLASGOW_HASKELL__ >= 821 )
ver = ">= 821"
#else
ver = "< 821"
#endif

-- Foo.hs
module Main where

import Bar

main = putStrLn $ ver -- < 821 on my machine