instance Functor (State s) where
fmap f (State g) = State $ \s0 ->
let (a, s1) = g s0
in (f a, s1)
Es ist die Implementierung Functor
für State
. Ich kann nicht verstehen, wie es funktioniert. Insbesondere wird g
verwendet, da es eine Funktion wäre, aber auf meinem Auge ist es keine Funktion. Es ist nur Objekt (vielleicht Funktion), aber ich kann nicht verstehen, warum es Funktion ist. Schließlich sollte es ein Zustand sein, so kann es zum Beispiel Int
Functor Instanz des Status
Bitte machen Sie klar.
Normalerweise haben Sie 'State sa = State (s -> (s, a))' 'also' g' ist eine Funktion mit dem Typ 's -> (s, a)' (dh es nimmt einen Zustand und erzeugt ein Ergebnis ("a" in diesem Fall) und ein neuer Zustand ("s1")). Diese "Functor" -Instanz wendet einfach "f" auf das Ergebnis der Berechnung an, bevor der Wert zurückgegeben wird. – Bakuriu
Der Name Staat ist in der Tat verwirrend und der Staat ist eine Monade selbst. Was eine Monade ist, ist etwas, das auf einen Zustand zugreift und diesen modifiziert. – mb14