1module Compile (compile) where
3import qualified Data.Map as Map
5import qualified AST.Declaration as D
6import qualified AST.Expression.Canonical as Can
7import qualified AST.Module as Module
8import qualified AST.Module.Name as ModuleName
9import qualified Canonicalize
10import Elm.Utils ((|>))
11import qualified Elm.Package as Package
12import qualified Nitpick.PatternMatches as Nitpick
13import qualified Nitpick.TopLevelTypes as Nitpick
14import qualified Optimize
15import qualified Parse.Helpers as Parse
16import qualified Parse.Parse as Parse
17import qualified Reporting.Error as Error
18import qualified Reporting.Render.Type as RenderType
19import qualified Reporting.Result as Result
20import qualified Reporting.Warning as Warning
21import qualified Type.Inference as TI
26 Result.Result (Result.One RenderType.Localizer) Warning.Warning Error.Error
31 -> [ModuleName.Canonical]
34 -> Result Module.Optimized
35compile packageName canonicalImports interfaces source =
37 -- Parse the source code
39 Result.format Error.Syntax $
40 Parse.program packageName (getOpTable interfaces) source
42 -- Canonicalize all variables, pinning down where they came from.
44 Canonicalize.module' canonicalImports interfaces validModule
46 -- Run type inference on the program.
48 Result.from Error.Type $
49 TI.infer interfaces canonicalModule
51 -- One last round of checks
53 Result.format Error.Type $
54 Nitpick.topLevelTypes types $
55 Can.toSortedDefs (Module.program (Module.info canonicalModule))
58 Result.format Error.Pattern $
59 Nitpick.patternMatches interfaces canonicalModule
61 -- Do some basic optimizations
63 Optimize.optimize tagDict (Module.name canonicalModule) canonicalDefs
65 -- Add the real list of types
67 (Module.info canonicalModule)
68 { Module.types = types
69 , Module.program = optimisedDefs
72 return $ canonicalModule { Module.info = info }
75getOpTable :: Module.Interfaces -> Parse.OpTable
76getOpTable interfaces =
78 |> concatMap Module.iFixities
79 |> map (\(D.Infix op assoc lvl) -> ( 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