@@ -14,6 +14,7 @@ module Language.PureScript.Make
1414 , ProgressMessage(..), renderProgressMessage
1515 , MakeActions(..)
1616 , Externs()
17+ , rebuildModule
1718 , make
1819
1920 -- * Implementation of Make API using files on disk
@@ -147,6 +148,28 @@ data RebuildPolicy
147148 -- | Always rebuild this module
148149 | RebuildAlways deriving (Show, Read, Eq, Ord)
149150
151+-- | Rebuild a single module
152+rebuildModule :: forall m. (Monad m, MonadBaseControl IO m, MonadReader Options m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
153+ => MakeActions m
154+ -> [ExternsFile]
155+ -> Module
156+ -> m ExternsFile
157+rebuildModule MakeActions{..} externs m@(Module _ _ moduleName _ _) = do
158+ progress $ CompilingModule moduleName
159+ let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
160+ lint m
161+ ((checked@(Module ss coms _ elaborated exps), env'), nextVar) <- runSupplyT 0 $ do
162+ [desugared] <- desugar externs [m]
163+ runCheck' env $ typeCheckModule desugared
164+ checkExhaustiveModule env' checked
165+ regrouped <- createBindingGroups moduleName . collapseBindingGroups $ elaborated
166+ let mod' = Module ss coms moduleName regrouped exps
167+ corefn = CF.moduleToCoreFn env' mod'
168+ [renamed] = renameInModules [corefn]
169+ exts = moduleToExternsFile mod' env'
170+ evalSupplyT nextVar . codegen renamed env' . BU8.toString . B.toStrict . encode $ exts
171+ return exts
172+
150173-- |
151174-- Compiles in "make" mode, compiling each module separately to a js files and an externs file
152175--
@@ -157,7 +180,7 @@ make :: forall m. (Monad m, MonadBaseControl IO m, MonadReader Options m, MonadE
157180 => MakeActions m
158181 -> [Module]
159182 -> m Environment
160−make MakeActions{..} ms = do
183+make ma@MakeActions{..} ms = do
161184 requirePath <- asks optionsRequirePath
162185 when (isJust requirePath) $ tell $ errorMessage DeprecatedRequirePath
163186
@@ -221,21 +244,7 @@ make MakeActions{..} ms = do
221244 _ -> True
222245
223246 let rebuild = do
224− (exts, warnings) <- listen $ do
225− progress $ CompilingModule moduleName
226− let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
227− lint m
228− ((checked@(Module ss coms _ elaborated exps), env'), nextVar) <- runSupplyT 0 $ do
229− [desugared] <- desugar externs [m]
230− runCheck' env $ typeCheckModule desugared
231− checkExhaustiveModule env' checked
232− regrouped <- createBindingGroups moduleName . collapseBindingGroups $ elaborated
233− let mod' = Module ss coms moduleName regrouped exps
234− corefn = CF.moduleToCoreFn env' mod'
235− [renamed] = renameInModules [corefn]
236− exts = moduleToExternsFile mod' env'
237− evalSupplyT nextVar . codegen renamed env' . BU8.toString . B.toStrict . encode $ exts
238− return exts
247+ (exts, warnings) <- listen $ rebuildModule ma externs m
239248 markComplete (Just (warnings, exts)) Nothing
240249
241250 if shouldRebuild