import System.FilePath
import System.IO
+#if defined(mingw32_HOST_OS)
+import Control.Monad
+import Foreign
+import Foreign.C.String
+#endif
+
main :: IO ()
main = do
args <- getArgs
('-' : 'f' : ghc) : args' -> f ghc args'
-- If you need the first GHC flag to be a -f flag then
-- you can pass -- first
- "--" : args -> (Nothing, args)
- args -> (Nothing, args)
+ "--" : args' -> (Nothing, args')
+ _ -> (Nothing, args)
where f ghc args' = -- If there is another -f flag later on then
-- that overrules the one that we've already
-- found
hClose h
doIt ghc (ghc_args ++ [filename])
filename : prog_args -> do
- let c1 = ":set prog " ++ show filename
+ -- If the file exists, and is not a .lhs file, then we
+ -- want to treat it as a .hs file.
+ --
+ -- If the file doesn't exist then GHC is going to look for
+ -- filename.hs and filename.lhs, and use the appropriate
+ -- type.
+ exists <- doesFileExist filename
+ let xflag = if exists && (takeExtension filename /= ".lhs")
+ then ["-x", "hs"]
+ else []
+ c1 = ":set prog " ++ show filename
c2 = ":main " ++ show prog_args
- res <- rawSystem ghc (["-ignore-dot-ghci"] ++ ghc_args ++
+ res <- rawSystem ghc (["-ignore-dot-ghci"] ++
+ xflag ++
+ ghc_args ++
[ "-e", c1, "-e", c2, filename])
exitWith res