GHC api,這個提示是用各種插件包來實現的,不支持併發使用。
您可以留下一絲運行,雖然。這是一個MonadIO
的實例。
interpreterLoop :: (MonadIO m, Typeable) a => Chan ((MVar a, String)) -> InterpreterT m()
interpreterLoop ch = do
(mvar, command) <- liftIO $ readChan ch
a <- interpret command $ argTypeWitness mvar
liftIO $ putMVar mvar a
interpreterLoop ch
where
argTypeWitness :: MVar a -> a
argTypeWitness = undefined -- this value is only used for type checking, never evaluated
runInLoop :: Typeable a => Chan ((MVar a, String)) -> String -> IO a
runInLoop ch command = do
mvar <- newEmptyMVar
writeChan ch (mvar, command)
takeMVar mvar
(我沒有測試這一點,所以我可能已經錯過了一個或兩個細節,但其基本思想將工作)。
感謝。我認爲使用插件會在這裏有所作爲,因爲我的理解插件已編譯,並可以在以後並行運行? –
@JFritsch號有以那種方式都沒有區別。您可以使用提示加載函數。一旦加載,函數可以同時被多次評估。這只是加載本身,不能同時完成。 – Carl