Functional Reactive Animation ([[FRP]]) is a programming paradigm and a framework developed by [[Conal Elliott]] for creating reactive animations. It combines functional programming and reactive programming concepts to provide a concise and efficient way of expressing time-varying values and their relationships. # Time as a First-Class Citizen FRP is built on the idea that animations can be modeled as continuous functions over [[time]]. It **treats time as a first-class citizen**, allowing programmers to define behaviors that change over time and react to external events. This is in contrast to imperative approaches where animations are typically represented as sequences of discrete steps. The key concept in FRP is the signal, which represents a value that changes over time. Signals can be combined using functional composition operators, allowing for the creation of complex behaviors by combining simpler ones. These compositions create new signals that automatically update whenever their dependencies change. FRP also introduces the notion of events, which represent discrete points in time when some specific occurrence happens. Events can trigger actions or modify the behavior of signals. One important aspect of [[FRP]] is its ability to handle continuous-time semantics efficiently. By representing signals as mathematical functions, FRP frameworks can optimize computations and avoid unnecessary updates when values don't change. This might relate to the way [[Signal.js]] is being implemented in JavaScript/React frameworks. Conal Elliot's work on FRP has greatly influenced the field of reactive programming and has been used in various domains, including user interface development, game programming, robotics, and simulation. His research has led to the creation of several FRP libraries and frameworks in different programming languages. # Conclusion Overall, Functional Reactive Animation provides a powerful way of modeling dynamic systems that involve changing values over time. It offers an elegant approach to creating reactive animations by leveraging functional programming principles and treating time as a fundamental component. # References ```dataview Table title as Title, authors as Authors where contains(subject, "Functional Reactive Animation") or contains(title, "Functional Reactive Animation") or contains(subject, "time") ```