我正在使用 Netwire 编写一个由网络事件驱动的程序。我想这里有三个问题:
什么使
Control.Wire.Unsafe.Event
不安全?正如标题所说,我需要维护哪些不变量才能安全使用它?我决定我需要这样的东西:
mapMaybeE :: Monad m => (a -> Maybe b) -> Wire s e m (Event a) (Event b)
. 上下文是我有来自网络的消息,我只想回复其中的一些。这是我写的:mapMaybeE :: Monad m => (a -> Maybe b) -> Wire s e m (Event a) (Event b) mapMaybeE f = arr go . arr (fmap f) where go WU.NoEvent = WU.NoEvent go (WU.Event Nothing) = WU.NoEvent go (WU.Event (Just a)) = WU.Event a
那是“合法的”吗?或者如果没有事件我应该抑制?
Netwire 对这类问题有意义吗?我见过的所有例子都是不断循环的游戏。在这里,我只想在有事情要做的时候踩线。大多数情况下,这将是网络事件,但我可能还想在计时器上做一些事情。例如,一个事件进来,然后五秒钟后程序做一些事情。它不应该连续循环,直到会话中的时间比事件进入时长 5 秒。