Anki FSRS moves closer to being a "just-in-time" algorithm based only on user-provided inputs. And although its data structures aren't strictly modular, they come as close as practical to that ideal while still remaining compatible with legacy Anki decks and extensions.
In practice, that's illustrated by the fact that there's now a button to fully recompute all intervals and difficulties based only on your history and the current algorithm tunings. And if you've already been using FSRS and the tunings haven't changed, the recomputation won't have any effect because it's equivalent to the incremental computations after each review.
So in principle it could be thought of as a just-in-time pure function, which involves a cache of generated data only for legacy & performance reasons.
Aren't there three separate items?
1) Your cards (or a subset of cards).
2) The history of your interactions with them.
3) An algorithm (potentially just-in-time) taking that history into account to present cards to you, thereby adding to the history.