5

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

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

我需要 cabal 1.14.0 的解决方案

编辑:

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

4

1 回答 1

4

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

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

您可以使用\begin{code}...\end{code}块来获得两者,但如果您将它们与>-style 代码行混合,请记住额外的空间并将其添加到包裹在\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 ()
于 2013-05-14T13:58:27.290 回答