3

2つのヒントインタープリターを開始し、実行時に、その後、どちらか一方に小さな計算を割り当てる方法はありますか?小さな式(たとえば、Webサイトに入力されたもの)のヒントを呼び出すと、信頼できるテストなしで、ヒントを開始/ロードする時間は約1秒であるように見えます。インスタンスがすでに開始されている場合、その秒は削られます。

ヒントには、開始して後で使用できるように保留しておくことができる機能がないようです。

もちろん、(自動)プラグインはさらなるオプションですが、モジュールにはより適していて、小規模な計算にはあまりエレガントではないと思います。

4

1 に答える 1

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

(私はこれをテストしなかったので、詳細を 1 つか 2 つ見落としているかもしれませんが、基本的な考え方は機能します。)

于 2012-09-28T04:28:17.277 に答える