Der Code, den Sie geliefert haben definiert die Art der Sache State s a
ist. Und es sagt auch, dass State s
eine Monade ist - das heißt, die Art der Sache State s
ist mit der Monad
Typklasse/Schnittstelle konform. Dies bedeutet, dass Sie eine State s
Berechnung an eine andere binden können (solange der Typ s
in jedem gleich ist).
So ist Ihre Situation analog zu der von jemandem, der die Art der Sache definiert hat, die ein Map
ist, und hat auch Code geschrieben, der besagt, dass ein Map
solchen und solchen Schnittstellen entspricht, aber wer keine Karten hat, und hat noch keine Berechnungen mit ihnen ausgeführt. Es gibt nichts zu drucken.
Ich nehme an, Sie das Ergebnis der Auswertung oder Ausführung Ihres Staates Maßnahmen sehen wollen, aber Sie haben keine Istzustand Aktionen noch definiert, noch haben Sie runState
genannt (oder evalState
oder execState
) auf sie. Vergessen Sie nicht, dass Sie auch einen Anfangszustand angeben müssen, um die Berechnung auszuführen.
Also vielleicht beginnen mit s
und a
einige Arten sein. Z.B. lasst s
Int
sein und a
Int
sein. Jetzt könntest du ein paar Fn schreiben, z.B. f :: Int -> (Int, Int)
und g :: Int -> (Int, Int)
. Vielleicht dekrementiert eine Funktion den Zustand, gibt den neuen Zustand und Wert zurück, und eine andere Funktion inkrementiert den Zustand und gibt den neuen Zustand und Wert zurück. Dann könnten Sie einen State Int Int
aus f
machen, indem Sie ihn in den State
Konstruktor einpacken. Und Sie könnten >>=
verwenden, um so viele Statusaktionen zusammenzufassen, wie Sie möchten. Schließlich können Sie hier runState
verwenden, um den resultierenden Wert und den resultierenden Status zu erhalten, solange Sie auch einen Anfangszustand (z. B. 0) angeben.
"So drucken Sie eine State Monad" ist eine völlig andere Frage als "wie das _result_ einer State Monad" drucken, zumindest wenn ich ersteres als Ausdruck einer _State_Aktion_ und letzterer als _printing_der_Monade verstehe Ergebnis der einmaligen Durchführung einer 'State'-Aktion. Was meinst du? – leftaroundabout
@leftaroundabout Ergebnis sorry. –