1
1
mirror of https://github.com/github/semantic.git synced 2024-12-21 05:41:54 +03:00

Lift actions into IO.

This commit is contained in:
Rob Rix 2017-07-21 13:28:04 -04:00
parent 0109f340ed
commit e6bb7d6863

View File

@ -130,15 +130,15 @@ runTask task = do
logging <- async (writeThread logQueue) logging <- async (writeThread logQueue)
result <- runFreerM (\ task -> case task of result <- runFreerM (\ task -> case task of
ReadBlobs source -> writeLog (Info "ReadBlobs") *> pure (either Files.readBlobsFromHandle (traverse (uncurry Files.readFile)) source) ReadBlobs source -> pure <$ writeLog (Info "ReadBlobs") <*> either Files.readBlobsFromHandle (traverse (uncurry Files.readFile)) source
ReadBlobPairs source -> writeLog (Info "ReadBlobPairs") *> pure (either Files.readBlobPairsFromHandle (traverse (traverse (uncurry Files.readFile))) source) ReadBlobPairs source -> pure <$ writeLog (Info "ReadBlobPairs") <*> either Files.readBlobPairsFromHandle (traverse (traverse (uncurry Files.readFile))) source
WriteToOutput destination contents -> writeLog (Info "WriteToOutput") *> pure (either B.hPutStr B.writeFile destination contents) WriteToOutput destination contents -> writeLog (Info "WriteToOutput") *> (pure <$> liftIO (either B.hPutStr B.writeFile destination contents))
WriteLog message -> pure (atomically (writeTMQueue logQueue message)) WriteLog message -> pure <$> liftIO (atomically (writeTMQueue logQueue message))
Parse parser blob -> writeLog (Info "Parse") *> pure (runParser parser blob) Parse parser blob -> pure <$ writeLog (Info "Parse") <*> liftIO (runParser parser blob)
Decorate algebra term -> writeLog (Info "Decorate") *> pure (pure (decoratorWithAlgebra algebra term)) Decorate algebra term -> pure <$ writeLog (Info "Decorate") <*> pure (decoratorWithAlgebra algebra term)
Diff differ terms -> writeLog (Info "Diff") *> pure (pure (differ terms)) Diff differ terms -> pure <$ writeLog (Info "Diff") <*> pure (differ terms)
Render renderer input -> writeLog (Info "Render") *> pure (pure (renderer input)) Render renderer input -> pure <$ writeLog (Info "Render") <*> pure (renderer input)
Distribute tasks -> writeLog (Info "Distribute") *> pure (Async.mapConcurrently runTask tasks >>= pure . withStrategy (parTraversable rseq)) Distribute tasks -> pure <$ writeLog (Info "Distribute") <*> (liftIO (Async.mapConcurrently runTask tasks) >>= pure . withStrategy (parTraversable rseq))
LiftIO action -> pure action) LiftIO action -> pure action)
task task
atomically (closeTMQueue logQueue) atomically (closeTMQueue logQueue)