Functional Reactive Programming (FRP) is an approach to reactive programming
where systems are structured as networks of functions operating on signals.
FRP is based on the synchronous data-flow paradigm and supports both
continuous-time and discrete-time signals (hybrid systems). What sets FRP
apart from most other languages for similar applications is its support for
systems with dynamic structure and for higher-order data-flow constructs. This
raises a range of implementation challenges. This paper contributes towards
advancing the state of the art of FRP implementation by studying the notion of
signal change and change propagation in a setting of hybrid signal function
networks with dynamic structure. To sidestep some problems of certain previous
FRP implementations that are structured using arrows, we suggest working with
a notion of composable, multi-input and multi-output signal functions. A clear
conceptual distinction is also made between continuous-time and discrete-time
signals. We then show how establishing change-related properties of the signal
functions in a network allows such networks to be simplified (static
optimisation) and can help reducing the amount of computation needed for
executing the networks (dynamic optimisation). Interestingly, distinguishing
between continuous-time and discrete-time signals allows us to characterise
the change-related properties of signal functions more precisely than what we
otherwise would have been able to, which is helpful for optimisation.