1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
9import qualified Data.Map as Map
10import qualified Data.Name as Name
11import qualified Data.OneOrMore as OneOrMore
13import qualified AST.Source as Src
14import qualified AST.Canonical as Can
15import qualified AST.Optimized as Opt
16import qualified Canonicalize.Module as Canonicalize
17import qualified Elm.Interface as I
18import qualified Elm.ModuleName as ModuleName
19import qualified Elm.Package as Pkg
20import qualified Nitpick.PatternMatches as PatternMatches
21import qualified Optimize.Module as Optimize
22import qualified Reporting.Error as E
23import qualified Reporting.Result as R
24import qualified Reporting.Warning as W
25import qualified Type.Constrain.Module as Type
26import qualified Type.Solve as Type
28import System.IO.Unsafe (unsafePerformIO)
37 { _modul :: Can.Module
38 , _types :: Map.Map Name.Name Can.Annotation
39 , _graph :: Opt.LocalGraph
43compile :: Pkg.Name -> Map.Map ModuleName.Raw I.Interface -> Src.Module -> Either (OneOrMore.OneOrMore E.Error) Artifacts
44compile pkg ifaces modul =
46 do canonical <- canonicalize pkg ifaces modul
47 annotations <- typeCheck canonical
48 () <- nitpick canonical
49 objects <- optimize annotations canonical
50 return (Artifacts canonical annotations objects)
57canonicalize :: Pkg.Name -> Map.Map ModuleName.Raw I.Interface -> Src.Module -> R.Result i [W.Warning] E.Error Can.Module
58canonicalize pkg ifaces modul =
59 R.mapError E.Canonicalize $ Canonicalize.canonicalize pkg ifaces modul
62typeCheck :: Can.Module -> R.Result i w E.Error (Map.Map Name.Name Can.Annotation)
64 case unsafePerformIO (Type.run =<< Type.constrain canonical) of
69 R.throw (E.Type errors)
72nitpick :: Can.Module -> R.Result i w E.Error ()
74 case PatternMatches.check canonical of
79 R.throw (E.Pattern errors)
82optimize :: Map.Map Name.Name Can.Annotation -> Can.Module -> R.Result i [W.Warning] E.Error Opt.LocalGraph
83optimize annotations canonical =
84 R.mapError E.Main $ Optimize.optimize annotations canonical
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