newAddHandler
このように使用されます:
do (addHandler, fire) <- newAddHandler
...
addHandler
はに渡すAddHandlerreactive-banana
であり、イベントをトリガーするタイプ(aはイベントタイプ)fire
の関数です。a -> IO ()
たとえば、次fire
のように、GLFWのマウスボタンイベントへのコールバックとしてインストールする可能性があります。
registerMouseButton :: IO (Event MouseButton)
registerMouseButton = do
(addHandler, fire) <- newAddHandler
setMouseButtonCallback $ \button _ -> fire button
fromAddHandler addHandler
(私はGLFWの経験がないので、setMouseButtonCallback
コールバックの2番目の引数が何であるかわかりません。重要な場合は、この実装を適切に修正する必要があります。)
AnAddHandler
は、コールバックを受け取る関数です— a -> IO ()
—そしてそれを問題のイベントに登録します。次に、このハンドラーの登録を解除するために使用されるアクションを(内部から)返し、読み取りの完全な定義を次のようにします。IO
IO ()
AddHandler
type AddHandler a = (a -> IO ()) -> IO (IO ())
では、どこからnewAddHandler
来るのでしょうか?シンプル:newAddHandler
イベントのハンドラーのリストを維持し、fire x
実行時にそれらをアクティブにします。
newAddHandler
GTK +や他の多くの一般的なツールキットのように、ツールキットに複数のイベントハンドラーを登録および登録解除する機能がすでにある場合は必要ありません。含まれている場合は、独自の実装を作成する必要がありますAddHandler
。ただし、サポートするのが単一のコールバックだけの場合は、を使用する必要がありますnewAddHandler
。
AddHandler
をFRPに公開する必要はないことに注意してください-コード自体を使用します。Event
これらは、外部入力からを作成するために使用される単なる内部接着剤です。