我一直在寻找一段时间,我认为我误解了关于切换的一些基本内容。考虑以下代码
mywire :: HasTime t s => Wire s () IO a Int
mywire = pure 10
mycont :: HasTime t s => Wire s () IO a (Wire s () IO a Int)
mycont = after 10 . pure (pure 20)
mycont' :: HasTime t s => Wire s () IO a (Event (Wire s () IO a Int))
mycont' = now . mycont
mything :: HasTime t s => Wire s () IO a (Int, Event (Wire s () IO a Int))
mything = (,) <$> mywire <*> mycont'
mainwire :: (Monad m, HasTime t s) => Wire s () m a Int
mainwire = switch mything
main :: IO ()
main = testWire clockSession_ mainwire
请注意,我在这里更加冗长只是为了了解所涉及的某些类型。我期望输出的是数字 10 重复 10 秒,然后我期望mainwire
切换到从返回的事件mything
(因为事件从mything
延迟 10 秒。)我看到的是主线抑制 10 秒,然后是 20。为什么我在切换之前没有看到最初输出 10?我想我误解了切换应该如何工作,任何澄清将不胜感激。谢谢你。