- let expr = "System.Environment.withProgName " ++ show filename ++
- " (System.Environment.withArgs " ++ show prog_args ++
- " (GHC.TopHandler.runIOFastExit" ++
- " (Main.main Prelude.>> Prelude.return ())))"
- res <- rawSystem ghc (["-ignore-dot-ghci"] ++ ghc_args ++
- [ "-e", expr, filename])
- -- runIOFastExit: makes exceptions raised by Main.main
- -- behave in the same way as for a compiled program.
- -- The "fast exit" part just calls exit() directly
- -- instead of doing an orderly runtime shutdown,
- -- otherwise the main GHCi thread will complain about
- -- being interrupted.
- --
- -- Why (main >> return ()) rather than just main? Because
- -- otherwise GHCi by default tries to evaluate the result
- -- of the IO in order to show it (see #1200).
+ let xflag = if takeExtension filename == ".lhs"
+ then []
+ else ["-x", "hs"]
+ c1 = ":set prog " ++ show filename
+ c2 = ":main " ++ show prog_args
+ res <- rawSystem ghc (["-ignore-dot-ghci"] ++
+ xflag ++
+ ghc_args ++
+ [ "-e", c1, "-e", c2, filename])