@@ -42,8 +42,10 @@ import qualified Data.Map as M
4242import qualified Language.PureScript as P
4343import qualified Language.PureScript.CodeGen.JS as J
4444import qualified Language.PureScript.Constants as C
45+import qualified Language.PureScript.CoreFn as CF
4546import qualified Paths_purescript as Paths
4647
48+
4749import Foreign
4850
4951data PSCOptions = PSCOptions
@@ -82,7 +84,7 @@ compile (PSCOptions input inputForeign opts stdin output externs usePrefix) = do
8284 hPutStrLn stderr err
8385 exitFailure
8486 Right (ms, foreigns) ->
85− case runPSC opts (compileJS (map snd ms) M.empty prefix) of
87+ case runPSC opts (compileJS (map snd ms) foreigns prefix) of
8688 Left errs -> do
8789 hPutStrLn stderr (P.prettyPrintMultipleErrors (P.optionsVerboseErrors opts) errs)
8890 exitFailure
@@ -106,13 +108,21 @@ compileJS :: forall m. (Functor m, Applicative m, MonadError P.MultipleErrors m,
106108 => [P.Module] -> M.Map P.ModuleName String -> [String] -> m (String, String)
107109compileJS ms foreigns prefix = do
108110 (modulesToCodeGen, exts, env, nextVar) <- P.compile ms
109− js <- concat <$> evalSupplyT nextVar (traverse J.moduleToJs modulesToCodeGen)
111+ js <- concat <$> evalSupplyT nextVar (traverse codegenModule modulesToCodeGen)
110112 js' <- generateMain env js
111113 let pjs = unlines $ map ("// " ++) prefix ++ [P.prettyPrintJS js']
112114 return (pjs, exts)
113115
114116 where
115117
118+ --codegenModule :: CF.Module CF.Ann -> m [J.JS]
119+ codegenModule m =
120+ J.moduleToJs m $ (\js -> J.JSApp (J.JSFunction Nothing [] (J.JSBlock
121+ [ J.JSVariableIntroduction "exports" (Just $ J.JSObjectLiteral [])
122+ , J.JSRaw js
123+ , J.JSReturn (J.JSVar "exports")
124+ ])) []) <$> CF.moduleName m `M.lookup` foreigns
125+
116126 generateMain :: P.Environment -> [J.JS] -> m [J.JS]
117127 generateMain env js = do
118128 mainName <- asks P.optionsMain