I got -main-is to work with a single Haskell file, but it seems to have trouble with multiple files.

$ cat scriptedmain.hs
#!/usr/bin/env runhaskell

module ScriptedMain where

meaningOfLife :: Int
meaningOfLife = 42

main :: IO ()
main = putStrLn $ "Main: The meaning of life is " ++ show meaningOfLife
$ cat test.hs
#!/usr/bin/env runhaskell

module Test where

import ScriptedMain hiding (main)

main :: IO ()
main = putStrLn $ "Test: The meaning of life is " ++ show meaningOfLife
$ ghc -o scriptedmain -main-is ScriptedMain scriptedmain.hs
$ ./scriptedmain
Main: The meaning of life is 42
$ ghc -o test -main-is Test.main test.hs scriptedmain.hs
compilation IS NOT required
ld: duplicate symbol _ZCMain_main_info in scriptedmain.o and test.o
collect2: ld returned 1 exit status

Cheers,

Andrew Pennebaker
www.yellosoft.us



On Sun, Mar 6, 2011 at 5:54 PM, Daniel Fischer <daniel.is.fischer@googlemail.com> wrote:
On Sunday 06 March 2011 23:32:43, Andrew Pennebaker wrote:
> Is there a way to compile a Haskell script with a different module name
> than Main?
>

$ ghc -main-is ScriptedMain --make ScriptedMain

The -main-is flag tells GHC what to regard as Main.main.
Give it a module name (Foo) to say main is Foo.main, a function name (bar)
to tell it main is Main.bar or a quailfied function name (Foo.bar) to tell
it main is function bar in module Foo.