Wie entwerfe ich einen monadischen Stack?

Wie entwerfen und bauen Sie Ihre monadischen Stapel? Zum ersten Mal muss ich einen monadischen Stack (unter Verwendung von Transformatoren) erstellen, um ein Problem der realen Welt zu lösen, aber ich bin mir nicht sicher, in welchemAuftrag die Transformatoren zu stapeln. Wie Sie bereits wissen, solange eine Berechnung Art hat* -> *Grundsätzlich kann in einem Transformator alles die Rolle der inneren Monade spielen, also ein paar Fragen:

Sollte sich ein bestimmter Transformator oben auf dem Stapel befinden (z. B. ReaderT? WriterT?)Was soll das Design antreiben? Intuition? Typen? (Passen Sie den Stapel beispielsweise an die Anforderungen Ihrer API an.)Ist jeder Stapel (bis zu einem gewissen Grad) zueinander isomorph oder ist es wahrscheinlich, dass ich, wenn ich meinen Stapel falsch aufbaue, in der Lage bin, bestimmte zugrunde liegende Monaden nicht zu verwenden oder ein großes Durcheinander zu habenlift . lift . liftIO [...]? Mein Bauchgefühl legt nahe, dass, wenn die Transformatoren einige Instanzen ableiten (z. B. MonadReader, MonadIO usw., wie die meisten Transformatoren inmtl tun), es sollte egal sein, in welcher Reihenfolge ich die Transformatoren stecke.

Ich bin daran interessiert, von erfahrenen Haskellern über Best Practices oder Faustregeln zu hören.

forever $ print "Thanks!"

EIN.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage