Итак, у меня есть система процессоров с поддержкой состояния, которые соединены вместе. Например, процессор может выводить среднее из последних 10 входов. Это требует состояния для вычисления этого среднего значения.
Я хотел бы представить значения в систему и получить выходные данные. Я также хотел бы вернуться назад и восстановить состояние в любое время в прошлом. То есть. Я запускаю 1000 значений через систему. Теперь я хочу "переместить" систему обратно так же, как и после того, как я отправил 500-е значение. Затем я хочу снова "переиграть" систему с этой точки.
Мне также нужно иметь возможность сохранить историческое состояние на диске, чтобы я мог восстановить все это снова в будущем (и все еще есть функции возврата и воспроизведения). И, конечно, мне нужно сделать это с гигабайтами данных, и это будет очень быстро:)
Я приближался к нему, используя закрытие, чтобы удерживать состояние. Но мне интересно, имеет ли смысл использовать монаду. Я прочитал только 3 или 4 аналогии для монад, поэтому не понимаю их еще хорошо, поэтому не стесняйтесь обучать меня.
Если каждый процессор изменяет свое состояние в монаде таким образом, что его история сохраняется и привязана к идентификатору для каждого этапа обработки. И тогда как-то монада может переключить свое состояние на id предыдущего шага и запустить систему с монадой в этом состоянии. И у монады был бы некоторый механизм для (де) сериализации для хранения.
(и учитывая размер данных... на самом деле не все должно быть в памяти, что означало бы, что монада должна была бы отображаться на диск, кэшироваться и т.д.)
Существует ли уже существующая библиотека/механизм/подход/концепция, которая уже была выполнена, чтобы выполнить или помочь в достижении того, что я пытаюсь сделать?