1module Compile (compile) where
3import qualified Data.Map as Map
5import qualified AST.Module as Module
6import qualified AST.Module.Name as ModuleName
7import qualified Canonicalize
9import qualified Elm.Package as Package
10import qualified Nitpick.PatternMatches as Nitpick
11import qualified Nitpick.TopLevelTypes as Nitpick
12import qualified Parse.Helpers as Parse
13import qualified Parse.Parse as Parse
14import qualified Reporting.Error as Error
15import qualified Reporting.Result as Result
16import qualified Reporting.Warning as Warning
17import qualified Type.Inference as TI
23 -> [ModuleName.Canonical]
26 -> Result.Result Warning.Warning Error.Error Module.CanonicalModule
28compile packageName isRoot canonicalImports interfaces source =
30 -- Parse the source code
32 Result.mapError Error.Syntax $
33 Parse.program packageName isRoot (getOpTable interfaces) source
35 -- Canonicalize all variables, pinning down where they came from.
37 Canonicalize.module' canonicalImports interfaces validModule
39 -- Run type inference on the program.
41 Result.from Error.Type $
42 TI.infer interfaces canonicalModule
44 -- One last round of checks
45 Result.mapError Error.Type $
46 Nitpick.topLevelTypes types (Module.body validModule)
48 Nitpick.patternMatches interfaces canonicalModule
50 -- Add the real list of types
51 let body = (Module.body canonicalModule) { Module.types = types }
53 return $ canonicalModule { Module.body = body }
56getOpTable :: Module.Interfaces -> Parse.OpTable
57getOpTable interfaces =
59 |> concatMap Module.iFixities
60 |> 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