@@ -13,33 +13,35 @@
1313 Example implementations using Yesod and Happstack are available
1414 at <https://github.com/tazjin/Elm/tree/master/Examples>
1515-}
16−module Language.Elm (
17− compile, toHtml,
18− moduleName,
19− runtime, docs
20− ) where
21−
22−import qualified Ast as Ast
23−import qualified Libraries as Libraries
16+module Language.Elm (compile, toHtml, moduleName, runtime, docs) where
17+
2418import Data.List (intercalate)
2519import Data.Version (showVersion)
2620import CompileToJS (showErr, jsModule)
27−import ExtractNoscript
28−import GenerateHtml
29−import Initialize
21+import GenerateHtml (generateHtml)
22+import Initialize (buildFromSource)
23+import Parse.Library
24+import Parse.Modules (moduleDef)
3025import Text.Blaze.Html (Html)
26+import Text.Parsec (option,optional)
3127import Paths_Elm
3228
3329-- |This function compiles Elm code to JavaScript.
3430compile :: String -> String
3531compile source = either showErr jsModule modul
36− where modul = buildFromSource True source
32+ where
33+ modul = buildFromSource True source
3734
3835-- |This function extracts the module name of a given source program.
3936moduleName :: String -> String
40−moduleName source = either (const "Main") getName modul
41− where modul = buildFromSource False source
42− getName (Ast.Module names _ _ _) = intercalate "." names
37+moduleName source = case iParse getModuleName "" source of
38+ Right name -> name
39+ Left _ -> "Main"
40+ where
41+ getModuleName = do
42+ optional freshLine
43+ (names, _) <- option (["Main"],[]) moduleDef
44+ return (intercalate "." names)
4345
4446-- |This function compiles Elm code into a full HTML page.
4547toHtml :: String -- ^ Location of elm-min.js as expected by the browser