Functional-reactive programming