This document discusses using RxSwift to implement the Model-View-ViewModel (MVVM) pattern. It describes how to define ViewModels as functions that take Observables as input and produce Observables as output. This approach decouples the business logic from the view implementation and makes the ViewModels testable. It also shows how to define ViewModel inputs and outputs as structures and use a ViewModel factory to connect them. Additionally, it demonstrates how to include actions/side effects in the ViewModel by returning an Observable of action types along with the output. Overall, this functional approach to ViewModels with RxSwift enables expressive, testable, and decoupled app architecture.