Ist ein fauler, breitester monadischer Rosenbaum möglich?

Data.Tree enthältunfoldTreeM_BF undunfoldForestM_BF dient dazu, Bäume mit den Ergebnissen monadischer Aktionen als erstes zu konstruieren. Der Tree Unfolder kann einfach mit dem Forest Unfolder geschrieben werden, also werde ich mich auf Letzteres konzentrieren:

unfoldForestM_BF :: Monad m =>
             (b -> m (a, [b])) -> [b] -> m [Tree a]

Starten Sie mit einer Liste von Samen und wenden Sie auf jeden eine Funktion an. Dabei werden Aktionen generiert, mit denen die Baumwurzeln und die Samen für die nächste Entfaltungsstufe erzeugt werden. Der verwendete Algorithmus ist etwas streng. Verwenden Sie alsounfoldForestM_BF mit demIdentity Monade ist nicht genau das gleiche wie die Verwendung der reinenunfoldForest. Ich habe versucht herauszufinden, ob es einen Weg gibt, es faul zu machen, ohne sein @ zu opferO(n) Zeit gebunden. Wenn dies unmöglich ist (wie Edward Kmett mir vorgeschlagen hat), frage ich mich, ob es möglich wäre, dies mit einem eingeschränkteren Typ zu tun, der speziell @ erforderMonadFix eher, alsMonad. Das Konzept besteht darin, (irgendwie) die Zeiger auf die Ergebnisse zukünftiger Berechnungen zu setzen, während diese Berechnungen der Aufgabenliste hinzugefügt werden. Wenn sie also nicht mit den Auswirkungen früherer Berechnungen vertraut sind, stehen sie sofort zur Verfügun