
#13801: Make -main-is work with {thing} from arbitrary installed packages -------------------------------------+------------------------------------- Reporter: SimonHengel | Owner: (none) Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by ezyang): So, are you aware that you can already refer to an identifier that is not defined in the Main module? The trick is that you have to export any of the identifiers you want to use. Here is a self-contained example: {{{ -- A.hs module A where f = print "This is A" -- Main.hs module Main(main, f) where import A main :: IO () main = return () }}} And then: `ghc --make Main.hs -main-is f`. Now, there are still things you might want to do... **You might want to not have to explicitly export f.** Then you would have to modify `checkMainExported`, and figure out if there was a technical reason why we required this (quite possibly because if it isn't exported, we will dead code eliminate it.) Maybe you should implicitly export any identifier mentioned with `-main-is`. That sounds helpful. **You might not want to have to import A.** In this case, you have to modify this code: {{{ getMainFun :: DynFlags -> RdrName getMainFun dflags = case mainFunIs dflags of Just fn -> mkRdrUnqual (mkVarOccFS (mkFastString fn)) Nothing -> main_RDR_Unqual }}} You'll have to take the module name, run it through the module lookup mechanism to make a Module, and then make an Orig RdrName. **You don't want to have to write main at all.** I think this is what you actually were asking for, based on the ticket text. In that case, GHC has to know that, if you pass `-main-is` and an empty list of modules, it should generate an empty source file (for Main), and then attempt to build that. You'd have to implement the previous step before that too. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13801#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler