ヒントが実装されている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
(私はこれをテストしなかったので、詳細を 1 つか 2 つ見落としているかもしれませんが、基本的な考え方は機能します。)