Die Instanz ist definiert alsMonadFix Beispiel für []
instance MonadFix [] where
mfix f = case fix (f . head) of
[] -> []
(x:_) -> x : mfix (tail . f)
Aber ich bin es nicht die intuitive Bedeutung dahinter in Bezug auf die []
Monade als nicht-deterministische Berechnungen gesehen zu erfassen. In mfix f
Funktion f
muss nicht streng in seinem Argument sein, so kann es das Argument nicht untersuchen. Und entsprechend der Definition kann es auch nicht das Argument irgendwo in seiner Ausgabe verwenden, sonst wird es irgendwann fix (f . head)
und divergieren. Also gibt es irgendeine Verwendung (oder gutes Beispiel) für mfix
für Listen, außer mfix (const someList)
?
"*' f' darf nicht streng sein Argument * "bedeutet nicht, dass, wenn das Argument nicht träge überprüft werden kann. – Bergi
@Bergi Guter Punkt. Können Sie ein Beispiel nennen? –