Toutes les méthodes de récupération assez paresse pour attacher le noeud dans une monade?
-
28-10-2019 - |
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?
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.