Как сделать сложную обработку ввода-вывода и неявный кеш в Haskell?

В больших приложениях очень часто существует несколько уровней кэширования ввода-вывода (Hibernate L1 и L2, Spring cache и т. Д.), Которые обычно абстрагированы, так что вызывающей стороне не нужно знать, что конкретная реализация выполняет IO. С некоторыми оговорками (область действия, транзакции) это позволяет упростить интерфейсы между компонентами.

Например, если компоненту A необходимо выполнить запрос к базе данных, ему не нужно знать, кэширован ли уже результат. Он мог быть найден B или C, о которых A ничего не знает, однако они обычно участвуют в каком-либо сеансе или транзакции - часто неявно.

Фреймворки, как правило, делают этот вызов неотличимым от простого вызова метода объекта с использованием таких методов, как AOP.

Могут ли приложения на Haskell получить такую выгоду? Как будет выглядеть интерфейс клиента?

Ответы на вопрос(2)

Ваш ответ на вопрос