1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
9import qualified Data.ByteString as BS
10import qualified Data.Map as Map
11import qualified Data.Name as Name
13import qualified AST.Canonical as Can
14import qualified AST.Optimized as Opt
15import qualified Canonicalize.Module as Canonicalize
16import qualified Elm.Interface as I
17import qualified Elm.ModuleName as ModuleName
18import qualified Elm.Package as Pkg
19import qualified Nitpick.PatternMatches as PatternMatches
20import qualified Optimize.Module as Optimize
21import qualified Parse.Module as Parse
22import qualified Reporting.Error as Error
23import qualified Reporting.Render.Type.Localizer as L
24import qualified Reporting.Result as Result
25import qualified Reporting.Warning as Warning
26import qualified Type.Constrain.Module as Type
27import qualified Type.Solve as Type
29import System.IO.Unsafe (unsafePerformIO)
37 Result.Result i [Warning.Warning] Error.Error a
41 Map.Map Name.Name ModuleName.Canonical
46 { _elmi :: I.Interface
51compile :: Pkg.Name -> ImportDict -> I.Interfaces -> BS.ByteString -> Result i Artifacts
52compile pkg importDict interfaces source =
54 valid <- Result.mapError Error.Syntax $
55 Parse.fromByteString pkg source
57 canonical <- Result.mapError Error.Canonicalize $
58 Canonicalize.canonicalize pkg importDict interfaces valid
60 let localizer = L.fromModule valid -- TODO should this be strict for GC?
63 runTypeInference localizer canonical
66 exhaustivenessCheck canonical
68 graph <- Result.mapError (Error.Main localizer) $
69 Optimize.optimize annotations canonical
73 { _elmi = I.fromModule annotations canonical
82runTypeInference :: L.Localizer -> Can.Module -> Result i (Map.Map Name.Name Can.Annotation)
83runTypeInference localizer canonical =
84 case unsafePerformIO (Type.run =<< Type.constrain canonical) of
89 Result.throw (Error.Type localizer errors)
93-- EXHAUSTIVENESS CHECK
96exhaustivenessCheck :: Can.Module -> Result i ()
97exhaustivenessCheck canonical =
98 case PatternMatches.check canonical of
100 Result.throw (Error.Pattern errors)
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