【问题标题】:Conditional Compilation inside Literate HaskellLiterate Haskell 中的条件编译
【发布时间】:2013-05-14 13:23:59
【问题描述】:

我有一个识字的haskell 文件并想使用条件编译。我使用文学编程的小鸟风格。以下代码不起作用。

> #if MIN_VERSION_base(4,6,0)
> import Control.Exception
> #endif

我需要 cabal 1.14.0 的解决方案

编辑:

cpphs 有一个选项 --unlit 可以取消文字源代码,但我不知道如何将此选项传递给 cabal 中的 cpphs。

【问题讨论】:

    标签: haskell preprocessor cabal literate-programming


    【解决方案1】:

    正如@kosmikus 指出的那样,您可以简单地将C 预处理器指令放在任何>\begin{code} 之外,它们将按预期工作——如果它们不干扰您对文字的非代码部分的处理代码。

    您根本不能将 C 预处理器指令与鸟式文学编程一起使用,因为 unlitting 步骤将 > 替换为空格,因此您没有机会将 # 放入第一列。您可以通过将 -keep-tmp-files 传递给 GHC 并检查生成的 .lpp 文件来验证这一点。

    您可以使用\begin{code}...\end{code} 块来获取两者,但是如果您将它们与> 样式的代码行混合在一起,请记住额外的空间并将其添加到您的行中在\begin{code}...\end{code}:

    > {-# LANGUAGE CPP #-}
    
    A literal comment
    
    \begin{code}
    #if MIN_VERSION_base(4,6,0)
      import Control.Exception
    #endif
    \end{code}
    
    > main = return ()
    

    【讨论】:

    • 真的要切换到代码块吗?你不能把 CPP 指令直接放在源文件中,没有任何前面的>
    • Ups,我以为我先尝试过,但确实如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2018-03-14
    • 2023-03-04
    • 2012-10-08
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多