on 357dedf help sign in
elk/src/Elm/Compiler.hs
73 lines 1.8 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE FlexibleContexts #-}
3module Elm.Compiler
4 ( version, rawVersion
5 , parseDependencies, compile
6 ) where
8import Control.Monad.Error.Class (MonadError, throwError)
9import qualified Data.Map as Map
11import qualified AST.Module as Module
12import qualified Compile
13import qualified Elm.Compiler.Module as PublicModule
14import qualified Elm.Compiler.Version as Version
15import qualified Generate.JavaScript as JS
16import qualified Parse.Helpers as Help
17import qualified Parse.Module as Parse
18import qualified Reporting.Annotation as A
19import qualified Reporting.Task as Task
22-- VERSION
24version :: String
25version =
26 Version.version
29rawVersion :: [Int]
30rawVersion =
31 Version.rawVersion
34-- DEPENDENCIES
36parseDependencies
37 :: (MonadError String m)
38 => String
39 -> m (PublicModule.Name, [PublicModule.Name])
40parseDependencies src =
41 case Help.iParse Parse.header src of
42 Left msg ->
43 throwError (show msg)
45 Right (Module.Header names _exports imports) ->
46 return
47 ( PublicModule.Name names
48 , map (PublicModule.Name . fst . A.drop) imports
49 )
52-- COMPILATION
54{-| Compiles Elm source code to JavaScript. -}
55compile
56 :: String
57 -> String
58 -> String
59 -> Map.Map PublicModule.Name PublicModule.Interface
60 -> Either String (PublicModule.Interface, String)
61compile user packageName source interfaces =
62 let unwrappedInterfaces =
63 Map.mapKeysMonotonic (\(PublicModule.Name name) -> name) interfaces
65 task =
66 Compile.compile user packageName unwrappedInterfaces source
67 in
68 case Task.run task of
69 (Right modul, _warnings) ->
70 Right (Module.toInterface modul, JS.generate modul)
72 (Left _docs, _warnings) ->
73 Left [error "TODO:compile"]