現在、reactive-banana および react-banana-wx パッケージを使用して、従来の wxHaskell の一部を再設計しています。ただし、動的なネットワーク構築 (MVar でスレッド ブロックに遭遇した場合) を回避するために、必要に応じて可視性を設定する wxHaskell ウィジェットの固定セットを事前に構築することで、これを模倣しています。可視性は、sink
を取る関数によって設定されBehavior
ます。ただし、wxHaskell では、これらすべてのウィジェットが を介して適切に変更された後、これらのウィジェットをsink
保持するパネルのレイアウトを引き続き変更する必要があります。つまり、sink
-ing は実際にはネットワークの一部であるべきであるため、トリガーしてレイアウトの変更を待機できるイベントです。現在のように、sink
sink
アクションが完了した後にイベントをトリガーすることはできません。私はこのようなものに適応しようとしましたsink
:
sink' :: Frameworks t =>
w -> [Prop' t w] -> Moment t (Event t ())
sink' widget props = do
es <- mapM sink1 props
return $ unions es
where
sink1 (attr :== b) = do
x <- initial b
liftIOLater $ set widget [attr := x]
e <- changes b
return $ (\x -> unsafePerformIO $ set widget [attr := x]) <$> e
ただし、unsafePerformIO
実行されませんでした。目的の動作を実現するにはどうすればよいですか。つまり、(wxHaskell) IO を によって待機できるようにするにはどうすればよいEvent
ですか?