Functional paradigms for user-interface (UI) programming have undergone significant evolution over the years, from early stream-based approaches, monad-based toolkits mimicking OO practice to modern model-view-update frameworks. Changing from the inherently imperative classic Model-View-Controller pattern to functional approaches has significant architectural impact, drastically reducing coupling and improving maintainability and testability. On the other hand, achieving good modularity with functional approaches is an ongoing challenge. This paper traces the evolution of functional UI toolkits along with the architectural implications of their designs (including two of our own), summarizes the current state of the art and discusses remaining issues.