2013-05-14 39 views
5

我有一个literate haskell文件,并且想要使用条件编译。我使用文学编程的鸟类风格。以下代码不起作用。Literate Haskell中的条件编译

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

我需要为小集团的解决方案1.14.0

编辑:

cpphs有一个选项--unlit这unlits有文化的源代码,但我不知道怎么打发这个在cabal中选择cpphs。

回答

4

@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() 
+0

您是否真的必须切换到代码块?你不能将CPP指令直接放在源文件中,没有任何前面的'>'? – kosmikus 2013-05-14 14:20:38

+0

Ups,我以为我先试过,但事实确实如此。 – 2013-05-14 14:33:58