Управление системой вычислений с отслеживанием состояния в Haskell

Итак, у меня есть система процессоров с отслеживанием состояния, которые связаны вместе. Например, процессор может выводить среднее значение из последних 10 входов. Для вычисления этого среднего требуется состояние.

Я хотел бы отправить значения в систему и получить результаты. Я также хотел бы вернуться и восстановить состояние в любое время в прошлом. Т.е. Я прогоняю через систему 1000 значений. Теперь я хочу «переместить» систему обратно в то состояние, в котором она была после того, как я отправил 500-е значение. Затем я хочу снова «воспроизвести» систему с этого момента.

Мне также нужно иметь возможность сохранять историческое состояние на диске, чтобы я мог восстановить все это снова когда-нибудь в будущем (и все еще иметь возможность вернуться и функции воспроизведения работают). И, конечно, мне нужно сделать это с гигабайтами данных, и сделать это очень быстро :)

Я подходил к этому, используя замыкания для удержания состояния. Но мне интересно, имеет ли смысл использовать монаду. Я прочитал только 3 или 4 аналогии для монад, поэтому пока не очень хорошо их понимаю, поэтому не стесняйтесь обучать меня.

Если каждый процессор изменяет свое состояние в монаде таким образом, что его история сохраняется, и он привязан к идентификатору для каждого шага обработки. И затем каким-то образом монада может переключить свое состояние на идентификатор прошлого шага и запустить систему с монадой в этом состоянии. И у монада будет некоторый механизм для (де) сериализации себя для хранения.

(и учитывая размер данных ... на самом деле даже не все должно быть в памяти, что означало бы, что монада должна быть отображается на диск, кэшируется и т. д. ...)

Есть ли уже существующая библиотека / механизм / подход / концепция, которые уже были созданы для выполнения или помощи в выполнении того, что я пытаюсь сделать?

15
задан mentics 26 July 2011 в 20:23
поделиться