【发布时间】:2012-11-14 19:57:05
【问题描述】:
我目前正在使用 reactive-banana 和 reactive-banana-wx 包重新设计一个遗留的 wxHaskell。然而,为了避免动态网络构建(我遇到了 MVar 上的线程块),我现在通过预先构建一组固定的 wxHaskell 小部件来模拟这一点,我根据需要设置了这些小部件的可见性。可见性由采用Behavior 的sink 函数设置。但是,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 没有被执行。如何实现所需的行为,即允许通过Event 等待(wxHaskell)IO?
【问题讨论】:
标签: haskell reactive-programming frp reactive-banana