我在程序中有这样的代码:
#if ( __GLASGOW_HASKELL__ >= 821 )
...
#else
...
#endif
但它没有按预期工作。很可能是因为我使用了错误的CPP pragma。所以我想知道是否有一些简单的方法可以检查已定义常量的值或评估CPP编译指示?
答案 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