Я пишу потоковый преобразователь из некоторого типа входных данных в тип выходных данных. Ввод данных осуществляется пользователем, поэтому между событиями существует некоторое время. Поскольку каждый вход требует некоторой загрузки ресурсов, я бы хотел «заглянуть в будущее», то есть отправить все возможные входные данные в основные вычислительные ресурсы и предварительно загрузить ресурсы на основе результатов.
В настоящее время всегда есть ровно один выход после каждого входа, но в конечном итоге это может быть интересно изменить.
Мне удалось реализовать это с помощью трансформатора Automaton Росса Патерсона. Я не уверен, что мое решение является оптимальным.
- Есть ли хорошие примеры, как это сделать? Возможно даже с тестовым кодом?
- Может ли это быть достигнуто и с помощью монады? (Примеры? Объяснение, почему это невозможно?)
Edit:
После звонка для уточнения я добавил код здесь. Сейчас я его удаляю (это было непонятно) и добавляю другое объяснение. На мой вопрос ответь.
Мое намерение состояло в том, чтобы остановить цикл основного события после каждого пользовательского ввода, который был подан на стрелку / преобразователь потока / что угодно. Затем он будет хранить текущее состояние автомата и посылать все возможные входы (фальшивые события) один за другим в автомат и видеть, какие ресурсы должны быть загружены для их кэширования. После следующего реального события он будет использовать кэш для лучшего отклика. Это не должно влиять на основные вычисления.