2012-09-27 83 views
3

有什麼辦法來啓動兩個提示口譯和在運行時&隨後指派較小的計算,以一個或其他?當我調用一個小表達式(例如鍵入一個網站)的提示時 - 沒有可靠的測試 - 在我看來,開始/加載提示的時間大約是一秒鐘。如果實例已經啓動,那麼第二個將被剃光。是否有可能運行提示的幾個實例並行?

的暗示似乎也沒有什麼功能,我可以啓動它,並把它很好地掛起,供以後使用。

(自動)插件將是當然的另外的選項,但我認爲是更適合的模塊和用於較小的計算更少雅緻。

回答

2

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 

(我沒有測試這一點,所以我可能已經錯過了一個或兩個細節,但其基本思想將工作)。

+0

感謝。我認爲使用插件會在這裏有所作爲,因爲我的理解插件已編譯,並可以在以後並行運行? –

+0

@JFritsch號有以那種方式都沒有區別。您可以使用提示加載函數。一旦加載,函數可以同時被多次評估。這只是加載本身,不能同時完成。 – Carl

相關問題