I have a literate haskell file and want to use conditional compilation. I use the bird style of literate programming. The following code does not work.
> #if MIN_VERSION_base(4,6,0)
> import Control.Exception
> #endif
I need a solution for cabal 1.14.0
EDIT:
cpphs has an option --unlit which unlits literate sourcecode, but I don't know how to pass this option to cpphs in cabal.
As @kosmikus points out, you can simply put the C preprocessor directives outside any >
or \begin{code}
and they will work as expected – if they do not interfere with your processing of the non-code parts of your literal code.
You simply cannot use C preprocessor directives with bird-style literate programming, as the unlitting step replaces the >
with a space, so you have no chance to get the #
into the first column. You can verify this by passing -keep-tmp-files
to GHC and checkout the generated .lpp
file.
You can resort to \begin{code}
...\end{code}
blocks to get both, but if you mix them them with >
-style lines of code, keep the extra space in mind and add it to your lines wrapped in \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 ()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With