@@ -27,12 +27,19 @@ import Language.PureScript.Sugar as P
2727import Language.PureScript.Options as P
2828
2929import Data.List (intercalate)
30−import Control.Monad (forM_)
30+import Control.Monad (when, forM_)
31+import qualified Data.Map as M
3132
3233compile :: Options -> [Module] -> Either String (String, String, Environment)
3334compile opts ms = do
3435 desugared <- desugar ms
3536 (_, env) <- runCheck $ forM_ desugared $ \(Module moduleName decls) -> typeCheckAll (ModuleName moduleName) decls
36− let js = prettyPrintJS . concatMap (flip (moduleToJs opts) env) $ desugared
37+ let js = concatMap (flip (moduleToJs opts) env) $ desugared
3738 let exts = intercalate "\n" . map (flip moduleToPs env) $ desugared
38− return (js, exts, env)
39+ js' <- case () of
40+ _ | optionsRunMain opts -> do
41+ when ((ModuleName (ProperName "Main"), Ident "main") `M.notMember` (names env)) $
42+ Left "Main.main is undefined"
43+ return $ js ++ [JSApp (JSAccessor "main" (JSVar (Ident "Main"))) []]
44+ | otherwise -> return js
45+ return (prettyPrintJS js', exts, env)