Of course 5 minutes later I find the magic combination that seems to work. What I did was I altered the inputs the wires took in to be
ball :: Wire () IO Paddle Ball
ball = ...
paddle :: Wire () IO Ball Paddle
paddle = ...
then when it came to creating my network of wires I did this:
{-# LANGUAGE DoRec #-}
{-# LANGUAGE Arrows #-}
system = proc g -> do
rec b <- delay (... ball initial value ...) . ball -< p
p <- paddle -< b
returnA -< (b,p)
This acknowlegdes their dependency, and gives the paddle the dummy initial value for the ball on it's first pass.