How can Gary Bernhardt's "Functional Core / Imperative Shell" architecture be used to design software for an elevator system?
Specifically, let's say there are a few elevators, each with call buttons (one per floor). Each elevator has sensors that report speed, position, and button status, and a controller that accepts instructions such as go up, go down, stop. Also each floor has sensors that report the status of the up and down call buttons.
Pick whatever is easiest for IO, like reliable messages or whatever. And pick whatever you is best in terms of concurrency (multiprocessing, multithreading or just asynchronous code).
An advanced elevator system bases its decisions on more than just current position, speed of each elevator and the state of request buttons on the floors and inside the elevator. In particular, to provide instructions to the elevators, it would need to know how long ago various events happened (to improve fairness) and perhaps even what the recent history was (this would help predict future requests).
But providing so much information as an input to a pure function seems very messy.
Am I thinking about it wrong, or is this problem just not well suited to that architecture?
Edit: as @ThomasKilian pointed out, the talk I'm referring to may not be as well known as I thought. So let me expand the question: I'm interested in any approach where all the non trivial business logic is mostly coded using functional programming style.