Skip to content

Commit 5702eb5

Browse files
committed
Merge remote-tracking branch 'oa/load-modules-concurrently'
2 parents fd322fe + 6fb43a4 commit 5702eb5

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

src/Language/PureScript/Ide.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ module Language.PureScript.Ide
2020

2121
import Protolude hiding (moduleName)
2222

23+
import Control.Concurrent.Async.Lifted (mapConcurrently_)
2324
import "monad-logger" Control.Monad.Logger (MonadLogger, logWarnN)
2425
import Data.Map qualified as Map
2526
import Data.Set qualified as Set
@@ -231,15 +232,15 @@ loadModules moduleNames = do
231232
efPaths =
232233
map (\mn -> oDir </> toS (P.runModuleName mn) </> P.externsFileName) efModules
233234
efiles <- traverse readExternFile efPaths
234-
traverse_ insertExterns efiles
235+
mapConcurrently_ insertExterns efiles
235236

236237
-- We parse all source files, log eventual parse failures and insert the
237238
-- successful parses into the state.
238239
(failures, allModules) <-
239240
partitionEithers <$> (parseModulesFromFiles =<< findAllSourceFiles)
240241
unless (null failures) $
241242
logWarnN ("Failed to parse: " <> show failures)
242-
traverse_ insertModule allModules
243+
mapConcurrently_ insertModule allModules
243244

244245
pure (TextResult ("Loaded " <> show (length efiles) <> " modules and "
245246
<> show (length allModules) <> " source files."))

src/Language/PureScript/Ide/SourceFile.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ module Language.PureScript.Ide.SourceFile
2222

2323
import Protolude
2424

25+
import Control.Concurrent.Async.Lifted (mapConcurrently)
26+
import Control.Monad.Trans.Control (MonadBaseControl)
2527
import Control.Parallel.Strategies (withStrategy, parList, rseq)
2628
import Data.Map qualified as Map
2729
import Language.PureScript qualified as P
@@ -37,11 +39,11 @@ parseModule path file =
3739
Right m -> Right (path, m)
3840

3941
parseModulesFromFiles
40-
:: (MonadIO m, MonadError IdeError m)
42+
:: (MonadIO m, MonadBaseControl IO m, MonadError IdeError m)
4143
=> [FilePath]
4244
-> m [Either FilePath (FilePath, P.Module)]
4345
parseModulesFromFiles paths = do
44-
files <- traverse ideReadFile paths
46+
files <- mapConcurrently ideReadFile paths
4547
pure (inParallel (map (uncurry parseModule) files))
4648
where
4749
inParallel :: [Either e (k, a)] -> [Either e (k, a)]

src/Language/PureScript/Ide/Types.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import Protolude hiding (moduleName)
1010
import Control.Concurrent.STM (TVar)
1111
import Control.Lens (Getting, Traversal', makeLenses)
1212
import Control.Monad.Fail (fail)
13+
import Control.Monad.Trans.Control (MonadBaseControl)
1314
import Data.Aeson (ToJSON, FromJSON, (.=))
1415
import Data.Aeson qualified as Aeson
1516
import Data.IORef (IORef)
@@ -174,7 +175,7 @@ data IdeEnvironment =
174175
, ideCacheDbTimestamp :: IORef (Maybe UTCTime)
175176
}
176177

177-
type Ide m = (MonadIO m, MonadReader IdeEnvironment m)
178+
type Ide m = (MonadIO m, MonadBaseControl IO m, MonadReader IdeEnvironment m)
178179

179180
data IdeState = IdeState
180181
{ ideFileState :: IdeFileState

0 commit comments

Comments
 (0)