Irgendwelche Methoden zur Wiederherstellung von genügend Faulheit, um den Knoten in einer Monate zu binden?
-
28-10-2019 - |
Frage
Ich möchte ein Stück Code schreiben (ich speichere mir viel Zeit, um sonst implementieren) den Knoten binden. Es geht grob so,
n <- myinstr n x
Wo theoretisch, myinstr
sollte laufen x
einen Wert erhalten, der werden wird n
. myinstr
, was in einem läuft State
monad, wird sagen n
in den Staat, aber das hat keinen Einfluss x
Berechnung.
Ich habe versucht zu benutzen DoRec
und eine naiive Umsetzung von mfix
,
instance Monad 𝔪 => MonadFix (MyMonad 𝔪) where
mfix f = fix (\mx -> mx >>= f)
Aber die Dinge frieren ein. Gibt es Methoden zur Behebung meines Codes (oder Methoden, um ihn zum ersten Mal korrekt zu entwerfen) oder sollte ich etwas Unkomplizierteres schreiben?
Lösung
Es gibt keine generische Möglichkeit, einen willkürlichen Monad zu einem Beispiel von zu machen MonadFix
. Der tatsächliche Code hängt vom Monad ab und ist für alle Monaden nicht einmal möglich. Sie können sich die verschiedenen Monaden ansehen, um zu sehen, wie es gemacht wird. Und wenn Ihre Monate tatsächlich ist State
Es sollte bereits eine Instanz geben.