Command-oriented functional programs are currently structured in an ad hoc way that makes the development of multiple userinterfaces difficult and error prone, and makes it difficult to abstractly understand a program's command-oriented behavior. To rectify this, we propose a software architecture for such programs that we call functional model-view-controller (MVC), by a rough analogy with object-oriented MVC. In functional MVC, a program is structured as a model (domain-specific aspects), view (abstract user) and controller (command loops). In contrast to objectoriented MVC, a controller is active, consisting of a number of recursive functions. It calls its view to get user input and to display results to the user; it calls its model to do domain-specific work. To increase adaptability, a controller should be parameterized by its model and view, using a function or an ML-style functor. With this approach, one can write terminal and graphical views; one can also write views that...