Thanks, Daniel. I'm still stumped. When I say

#include "B.hs"

in a .hs file, all works fine, but when in a .lhs file I get "error: B.hs: No such file or directory". The file B.hs is in the same directory as the including file, which is the current directory for ghci. Same situation with ghc.

If I change "B.hs" to "./B.hs", I get the same behavior. Only if I use a fully qualified path name for B.hs does it get found from the .lhs file.

I'm using GHC 6.12.3 on Mac OS 10.6.6.

Any ideas? (Anyone, not just Daniel.)

Thanks,  - Conal


On Thu, Feb 3, 2011 at 2:51 AM, Daniel Fischer <daniel.is.fischer@googlemail.com> wrote:
On Thursday 03 February 2011 10:33:23, Conal Elliott wrote:
> Does anyone have a working example of #include'ing Haskell code into a
> bird-tracks-style .lhs file with GHC? Every way I try leads to parsing
> errors. Is there documentation about how it's supposed to work?
>
> Help much appreciated.   - Conal

Stupid example:

-- Main:

> {-# LANGUAGE CPP #-}
> module Main (main) where

#include "MachDeps.h"

> main :: IO ()
> main = do

#if WORD_SIZE_IN_BITS == 32

>     putStrLn "32 bits"

#include "Stuff32"

# else

>     putStrLn "64 bits"

#include "Stuff64"
#endif

-- Stuff32:

     putStrLn "Included from Stuff32"

-- Stuff64:

     putStrLn "Included from Stuff64"


It's a bit tricky. Since the C preprocessor is run after the unlit, the
included code should not have bird-tracks, also you have to get the
indentation right. There's probably a way to run cpp before unlit, which
would allow you to have bird-tracks in the #include'd code.

Much easier with LaTeX-style literate code.

Cheers,
Daniel