現在、reactive-banana および react-banana-wx パッケージを使用して、従来の wxHaskell の一部を再設計しています。ただし、動的なネットワーク構築 (MVar でスレッド ブロックに遭遇した場合) を回避するために、必要に応じて可視性を設定する wxHaskell ウィジェットの固定セットを事前に構築することで、これを模倣しています。可視性は、sinkを取る関数によって設定されBehaviorます。ただし、wxHaskell では、これらすべてのウィジェットが を介して適切に変更された後、これらのウィジェットをsink保持するパネルのレイアウトを引き続き変更する必要があります。つまり、sink-ing は実際にはネットワークの一部であるべきであるため、トリガーしてレイアウトの変更を待機できるイベントです。現在のように、sinksinkアクションが完了した後にイベントをトリガーすることはできません。私はこのようなものに適応しようとしました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ですか?