Wie mache ich komplexe E / A-Verarbeitung und impliziten Cache in Haskell?

In größeren Anwendungen gibt es sehr oft mehrere Ebenen des IO-Caching (Ruhezustand L1 und L2, Spring-Cache usw.), die normalerweise abstrahiert werden, sodass der Aufrufer nicht wissen muss, dass eine bestimmte Implementierung IO ausführt. Mit einigen Einschränkungen (Umfang, Transaktionen) werden einfachere Schnittstellen zwischen Komponenten ermöglicht.

Wenn beispielsweise die Komponente A die Datenbank abfragen muss, muss sie nicht wissen, ob das Ergebnis bereits zwischengespeichert ist. Es könnte von B oder C abgerufen worden sein, von denen A nichts weiß, sie würden jedoch normalerweise an einer Sitzung oder Transaktion teilnehmen - oft implizit.

Frameworks neigen dazu, diesen Aufruf von einem einfachen Objektmethodenaufruf mit Techniken wie AOP ununterscheidbar zu machen.

Können Haskell-Anwendungen davon profitieren? Wie würde die Benutzeroberfläche des Kunden aussehen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage