cabal: question on compiling build prerequisites

Peter Selinger selinger at
Sun Dec 8 23:48:51 UTC 2013

Thanks for the suggestion! However, it is not portable: it doesn't
work on Windows.

Similarly, giving "runhaskell ./PreProc.hs" as the preprocessor
command to GHC doesn't work either, because GHC will try to run a
program with that exact name (including the space), rather than
interpreting it as a command with an argument.

In addition, even on Posix systems, where the above method does work,
it is nevertheless extremely slow: runhaskell will have to interpret
or compile ./PreProc.hs separately for each source file, of which
there could be many.

Another solution I thought of is to include

 import Preproc

at the beginning of Setup.hs. This way compiling Setup.hs would have
the side effect of compiling Preproc.hs. It would not work with the
"runhaskell Setup.hs" method, though.

-- Peter

Erik Hesselink wrote:
> On Sun, Dec 8, 2013 at 7:50 PM, Peter Selinger <selinger at> wrote:
> > thanks for your reply! So say my package directory contains two files:
> >
> >  Test.hs
> >  PreProc.hs
> >
> > What you are suggesting is:
> >
> >  ghc Test.hs -F -pgmF ./PreProc
> >
> > However, this gives the error message:
> >
> >  ghc: could not execute: ./PreProc
> >
> > And indeed, while GHC is smart enough to automatically run a
> > preprocessor, it is not smart enough to automatically *compile* the
> > preprocessor. So it needs to be compiled beforehand, which would be
> > Cabal's job.
> Not per se. You could try making it executable, and prepending a line like:
> #!/usr/bin/env runhaskell
> That way you can run your preprocessor like a script, without compiling it.
> Erik

More information about the cabal-devel mailing list