Question

Je veux écrire un peu slick de code (me sauver beaucoup de temps pour mettre en œuvre autrement) par attacher le noeud . Il va à peu près comme ça,

n <- myinstr n x

où en théorie, myinstr devrait fonctionner x pour obtenir une valeur, qui deviendra n. myinstr, qui se déroule dans une monade State, mettra n dans l'état, mais cela ne porte pas atteinte au calcul de x.

Je l'ai essayé d'utiliser DoRec et une mise en œuvre naiive de mfix,

instance Monad 𝔪 => MonadFix (MyMonad 𝔪) where
    mfix f = fix (\mx -> mx >>= f)

mais les choses gèlent. Y a-t-il des méthodes pour fixer mon code (ou méthodologies pour la conception correctement la première fois) ou devrais-je écrire quelque chose de plus simple?

Était-ce utile?

La solution

Il n'y a pas de façon générique pour faire un arbitraire monade une instance de MonadFix. Le code réel dépend de la monade, et il est même pas possible pour tous les monades. Vous pouvez regarder les différentes monades pour voir comment il est fait. Et si votre monade est en fait State il devrait déjà être une instance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top