1module Compile (compile) where
3import qualified Data.Map as Map
5import qualified AST.Module as Module
6import qualified Canonicalize
8import qualified Nitpick.TopLevelTypes as Nitpick
9import qualified Parse.Helpers as Parse
10import qualified Parse.Parse as Parse
11import qualified Reporting.Error as Error
12import qualified Reporting.Result as Result
13import qualified Reporting.Warning as Warning
14import qualified Type.Inference as TI
22 -> Result.Result Warning.Warning Error.Error Module.CanonicalModule
24compile user projectName interfaces source =
26 -- determine if default imports should be added
27 -- only elm-lang/core is exempt
29 not (user == "elm-lang" && projectName == "core")
31 -- Parse the source code
33 Result.mapError Error.Syntax $
34 Parse.program needsDefaults (getOpTable interfaces) source
36 -- Canonicalize all variables, pinning down where they came from.
38 Canonicalize.module' interfaces validModule
40 -- Run type inference on the program.
42 Result.from Error.Type $
43 TI.infer interfaces canonicalModule
45 -- One last round of checks
46 Result.mapError Error.Type $
47 Nitpick.topLevelTypes types (Module.body validModule)
49 -- Add the real list of types
50 let body = (Module.body canonicalModule) { Module.types = types }
52 return $ canonicalModule { Module.body = body }
55getOpTable :: Module.Interfaces -> Parse.OpTable
56getOpTable interfaces =
58 |> concatMap Module.iFixities
59 |> map (\(assoc,lvl,op) -> (op,(lvl,assoc)))
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list