Netwire相互依赖的电线

时间:2013-08-30 02:38:29

标签: haskell frp arrows netwire

为了试用Netwire,我正在使用该库实现Pong。在代码中我有一个球线和一个计算机桨线,由于它们相互依赖某些值,我遇到了无限循环的问题。一些伪代码解释:

ball :: Wire () IO GameInput Ball
ball = (... define ball ...) . pcPaddle

pcPaddle :: Wire () IO GameInput Paddle
pcPaddle = (... define pcPaddle ...) . ball

需要注意的是他们互相接受投入。我试图通过以下方式来缓解这种情况:

ball :: Wire () IO GameInput Ball
ball = ( ... ) . delay ( ... base paddle init ...) . pcPaddle

以及在这两条线路中使用delay功能的其他变体,但我无论如何都得到<<loop>>运行时错误。

如何初始化其中一根电线,以便该系统可以正常工作?

1 个答案:

答案 0 :(得分:6)

当然,5分钟后,我发现似乎有效的神奇组合。我所做的是改变了电线输入的输入

ball :: Wire () IO Paddle Ball
ball = ...

paddle :: Wire () IO Ball Paddle
paddle = ...

然后,在创建我的电线网络时,我做到了这一点:

{-# LANGUAGE DoRec  #-}
{-# LANGUAGE Arrows #-}
system = proc g -> do
    rec b <- delay (... ball initial value ...) . ball -< p
        p <- paddle -< b

    returnA -< (b,p)

这会确认他们的依赖关系,并在第一次传球时给球拍出球的虚拟初始值。