@@ -10,18 +10,17 @@ import Control.Monad.Trans (liftIO)
10import qualified Data.Map as Map
10import qualified Data.Map as Map
11import qualified System.Directory as Dir
11import qualified System.Directory as Dir
13−import qualified Deps.Cache as Cache
13+import qualified Deps.Registry as Registry
14−import qualified Deps.Explorer as Explorer
15import qualified Deps.Solver as Solver
14import qualified Deps.Solver as Solver
16import qualified Elm.Constraint as Con
15import qualified Elm.Constraint as Con
16+import qualified Elm.Outline as Outline
17import qualified Elm.Package as Pkg
17import qualified Elm.Package as Pkg
18−import qualified Elm.Project.Json as Project
19import qualified Elm.Version as V
18import qualified Elm.Version as V
20+import qualified Reporting
20import qualified Reporting.Doc as D
21import qualified Reporting.Doc as D
21import qualified Reporting.Exit as Exit
22import qualified Reporting.Exit as Exit
22−import qualified Reporting.Exit.Init as E
23+import qualified Stuff
23−import qualified Reporting.Task as Task
24−import qualified Reporting.Progress.Terminal as Terminal
@@ -30,19 +29,17 @@ import qualified Reporting.Progress.Terminal as Terminal
31run :: () -> () -> IO ()
30run :: () -> () -> IO ()
32run () () =
31run () () =
33− do reporter <- Terminal.create
32+ Reporting.attempt Exit.initToReport $
34− exists <- Dir.doesFileExist "elm.json"
33+ do exists <- Dir.doesFileExist "elm.json"
36− if exists then
34+ if exists
37− Task.throw (Exit.Init E.AlreadyStarted)
35+ then return (Left Exit.InitAlreadyExists)
39− do approved <- Task.getApproval question
37+ do approved <- Reporting.ask question
40 if approved
38 if approved
43− liftIO $ putStrLn "Okay, I created it. Now read that link!"
45− liftIO $ putStrLn "Okay, I did not make any changes!"
41+ do putStrLn "Okay, I did not make any changes!"
48question :: D.Doc
45question :: D.Doc
@@ -69,26 +66,32 @@ question =
72−init :: Task.Task ()
69+init :: IO (Either Exit.Init ())
74− do registry <- Cache.optionalUpdate
71+ do cache <- Stuff.getPackageCache
75−
72+ manager <- Http.getManager
76− maybeSolution <-
73+ eregistry <- Registry.latest manager cache
77− Explorer.run registry $ Solver.run $ Solver.solve defaults
74+ case eregistry of
79− case maybeSolution of
76+ return (Left (Exit.InitRegistryProblem rp))
79+ do result <- Solver.online cache manager registry defaults
82+ return (Left (Exit.InitNoSolution (Map.keys defaults)))
86+ solution = Map.map (\(Solver.Details vsn _) -> vsn) details
82− directs = Map.intersection solution defaults
87+ directs = Map.intersection solution defaults
83− indirects = Map.difference solution defaults
88+ indirects = Map.difference solution defaults
86− do Dir.createDirectoryIfMissing True "src"
90+ do Dir.createDirectoryIfMissing True "src"
87− Project.write "." $ Project.App $
91+ Outline.write "." $ Outline.App $
88− Project.AppInfo V.compiler ["src"] directs indirects Map.empty Map.empty
92+ Outline.AppOutline V.compiler ["src"] directs indirects Map.empty Map.empty
89−
93+ putStrLn "Okay, I created it. Now read that link!"
90− Nothing ->
94+ return (Right ())
91− Task.throw (Exit.Init (E.NoSolution (Map.keys defaults)))
94defaults :: Map.Map Pkg.Name Con.Constraint
97defaults :: Map.Map Pkg.Name Con.Constraint