data S = Sa Int
type PMO = StateT Int (ErrorT String IO)
cs :: S -> PMO()
cs _ = do
mem <- get -- (*)
return()
Ich habe die Zeile mit (*) markiert. Ich habe Zweifel, warum get
Funktion aufgerufen werden kann. Ich weiß, dass get
Funktion von State
Monade ist, aber ich kann nicht sehen/begreifen, wie es bekannt ist, dass es solche Monade tatsächlich gibt. Ich sehe, dass der zurückgegebene Typ PMO ist, aber es ist nur ein zurückgegebener Wert. Was hat es mit get
gemeinsam?Haskell und aufrufende Funktion.
Hauptsächlich habe ich eine Erfahrung mit imperativer Sprache Programmierung, so macht es mir Schwierigkeiten, es zu verstehen.
Mögliches Duplikat von [Wie funktioniert dieser State-Monad-Code?] (Http://stackoverflow.com/questions/31506839/how-does-this-state-monad-code-works) – duplode
('Get' arbeitet viel wie "frisch" in diesem Beispiel, außer dass die zugrunde liegende Funktion von "get" einfach "\ s -> (s, s)" ist, während "frisch" auch den Zustand ändert.) – duplode