A Functional Foundation for CQRS/ES