@@ -1,119 +0,0 @@
1−module Generate.Artifacts
8−import Control.Concurrent (forkIO)
9−import Control.Concurrent.MVar (newEmptyMVar, putMVar, readMVar)
10−import Control.Monad (foldM, void)
11−import Control.Monad.Except (liftIO)
12−import qualified Data.Binary as Binary
13−import qualified Data.ByteString.UTF8 as BS_UTF8
15−import qualified Data.Map as Map
17−import qualified Elm.Compiler as Compiler
18−import qualified Elm.ModuleName as ModuleName
20−import File.Compile (Answer(..))
21−import qualified Reporting.Exit.Compile as E
22−import qualified Reporting.Exit as Exit
23−import qualified Reporting.Task as Task
24−import qualified Stuff.Paths as Path
31−ignore :: Map ModuleName.Raw Answer -> Task.Task (Map ModuleName.Raw Compiler.Artifacts)
34− ignorer _name result =
37− gather ignorer answers
44−write :: FilePath -> Map ModuleName.Raw Answer -> Task.Task (Map ModuleName.Raw Compiler.Artifacts)
47− writer name result@(Compiler.Artifacts elmi elmo) =
48− do mvar <- newEmptyMVar
50− do Binary.encodeFile (Path.elmi root name) elmi
51− Binary.encodeFile (Path.elmo root name) elmo
55− do mvars <- gather writer answers
56− liftIO $ traverse readMVar mvars
63−gather :: OnGood a -> Map ModuleName.Raw Answer -> Task.Task (Map ModuleName.Raw a)
64−gather onGood answers =
65− do summary <- liftIO $
66− foldM (gatherHelp onGood) (Right Map.empty) (Map.toList answers)
69− Left (err, errors) ->
70− Task.throw (Exit.Compile err errors)
76−type OnGood a = ModuleName.Raw -> Compiler.Artifacts -> IO a
79−gatherHelp :: OnGood a -> Summary a -> (ModuleName.Raw, Answer) -> IO (Summary a)
80−gatherHelp onGood summary (name, answer) =
85− Bad path time src errors ->
86− do let err = E.Exit name path time (BS_UTF8.toString src) errors
87− return (addErr err summary)
90− do value <- onGood name result
91− return (addOk name value summary)
99− Either (E.Exit, [E.Exit]) (Map ModuleName.Raw a)
102−addOk :: ModuleName.Raw -> a -> Summary a -> Summary a
103−addOk name result acc =
109− Right (Map.insert name result results)
112−addErr :: E.Exit -> Summary a -> Summary a