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