The GHC API code you give is fine, and works correctly. In the whole
reproducer there is some additional code `getCoreFS` which is where
the error comes from.

On Mon, Feb 6, 2023 at 1:56 PM Matthew Pickering
<matthewtpicker...@gmail.com> wrote:
>
> Can you put the whole example into a github repo and then I will look
> at what is wrong?
>
> Matt
>
> On Mon, Feb 6, 2023 at 1:34 PM Eternal Recursion via ghc-devs
> <ghc-devs@haskell.org> wrote:
> >
> > Thanks, Andreas!
> >
> > I will check out the hint package and also play with verbosity and 
> > workingDirectory.
> >
> > I considered using the Cabal library to derive the inputs from the 
> > project's cabal file, but it does help first to know what the needful 
> > inputs are, and where to stash them in the DynFlags session settings.
> >
> > It's got to be one of those "One Weird Trick (tm)" gotcha settings that 
> > make it suddenly work. It seems obvious what some of the settings mean, but 
> > I suppose with more familiarity will come appreciation of nuances that make 
> > the apparently obvious meaning seem obviously wrong.
> >
> > Sincerely,
> >
> > Bob
> >
> > Sent with Proton Mail secure email.
> >
> > ------- Original Message -------
> > On Monday, February 6th, 2023 at 7:53 AM, Andreas Klebinger 
> > <klebinger.andr...@gmx.at> wrote:
> >
> > I think this is an ok forum for this kind of question. You could also try 
> > the haskell mailing list but I'm not sure if you will get more
> > help tehre.
> >
> > I recently played around with the ghc api and I found the `hint` package to 
> > be quite helpful as an example on how to do various
> > things when using the ghc api to implement your own interpreter.
> >
> > Have you tried setting verbose? Perhaps the include dir is relative to the 
> > working directory. In that case setting:
> >
> > , workingDirectory = Just targetDir
> > , importPaths = [targetDir] ++ importPaths dynflags
> >
> > would mean ghc will search in targetDir/targetDir for Lib/Lib2. Should be 
> > easy to say for sure by enabling verbosity and looking at the output.
> >
> > Am 06/02/2023 um 13:42 schrieb Eternal Recursion via ghc-devs:
> >
> > If this is the wrong forum for this question (which as I think about it, I 
> > suppose it is) then redirection to a more appropriate mailing list or forum 
> > (or any advice, really) would be appreciated. I just figured this would be 
> > the forum with the best understanding of how the GHC API works (and has 
> > changed over time), and my longer term goal is indeed to contribute to it 
> > after I get past my learning curve.
> >
> > Sincerely,
> >
> > Bob
> >
> > Sent with Proton Mail secure email.
> >
> > ------- Original Message -------
> > On Saturday, February 4th, 2023 at 4:04 PM, Eternal Recursion via ghc-devs 
> > <ghc-devs@haskell.org> wrote:
> >
> > Hi Everyone!
> >
> > I'm new here, trying to learn the GHC API. using 944 with cabal 3.8.1.0.
> >
> > How do I correctly set a GHC Session's DynFlags (and/or other properties) 
> > to ensure local libraries imported by the main target are resolved properly 
> > at compile time?
> >
> > What flags need to be set so that GHC is able to load/analyze/compile all 
> > relevant Libraries in a package?
> >
> > This is my current code:
> >
> > withPath :: FilePath -> IO ()
> > withPath target = do
> > let targetDir = takeDirectory target
> > let targetFile = takeFileName target
> > listing <- listDirectory targetDir
> > let imports = filter (\f -> takeExtension f == ".hs") listing
> > print imports
> > let moduleName = mkModuleName targetFile
> > g <- defaultErrorHandler defaultFatalMessager defaultFlushOut
> > $ runGhc (Just libdir) $ do
> > initGhcMonad (Just libdir)
> > dynflags <- getSessionDynFlags
> > setSessionDynFlags $ dynflags { ghcLink = LinkInMemory
> > , ghcMode = CompManager
> > , backend = Interpreter
> > , mainModuleNameIs = moduleName
> > , workingDirectory = Just targetDir
> > , importPaths = [targetDir] ++ importPaths dynflags
> > }
> > targets <- mapM (\t -> guessTarget t Nothing Nothing) imports
> > setTargets targets
> > setContext [ IIDecl $ simpleImportDecl (mkModuleName "Prelude") ]
> > load LoadAllTargets
> > liftIO . print . ppr =<< getTargets
> > getModuleGraph
> > putStrLn "Here we go!"
> > print $ ppr $ mgModSummaries g
> > putStrLn "☝️ "
> >
> > However, when I run it (passing to example/app/Main.hs, in which directory 
> > are Lib.hs and Lib2.hs, the latter being imported into Main), I get:
> >
> > $ cabal run cli -- example/app/Main.hs
> > Up to date
> > ["Main.hs","Lib.hs","Lib2.hs"]
> > [main:Main.hs, main:Lib.hs, main:Lib2.hs]
> > Here we go!
> > [ModSummary {
> > ms_hs_hash = 23f9c4415bad851a1e36db9d813f34be
> > ms_mod = Lib,
> > unit = main
> > ms_textual_imps = [(, Prelude)]
> > ms_srcimps = []
> > },
> > ModSummary {
> > ms_hs_hash = e1eccc23af49f3498a5a9566e63abefd
> > ms_mod = Lib2,
> > unit = main
> > ms_textual_imps = [(, Prelude)]
> > ms_srcimps = []
> > },
> > ModSummary {
> > ms_hs_hash = 5f6751d7f0d5547a1bdf39af84f8c07f
> > ms_mod = Main,
> > unit = main
> > ms_textual_imps = [(, Prelude), (, Lib2)]
> > ms_srcimps = []
> > }]
> > ☝
> >
> > example/app/Main.hs:4:1: error:
> > Could not find module ‘Lib2’
> > Use -v (or `:set -v` in ghci) to see a list of the files searched for.
> > |
> > 4 | import qualified Lib2 as L2
> > | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > cli: example/app/Main.hs:4:1: error:
> > Could not find module `Lib2'
> > Use -v (or `:set -v` in ghci) to see a list of the files searched for.
> >
> > What do I need to do differently to make this work?
> >
> > I have a local Cabal file I could use, but to know what I need out of it, I 
> > need to understand the minimum required info to get this to work. TIA!
> >
> > Sincerely,
> >
> > Bob
> >
> > Sent with Proton Mail secure email.
> >
> >
> >
> > _______________________________________________
> > ghc-devs mailing list
> > ghc-devs@haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
> >
> >
> > _______________________________________________
> > ghc-devs mailing list
> > ghc-devs@haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to