Malheureusement méconnue, monad-classes semble,
comparé à mtl et aux autres approches
pour gérer des piles de monades (Monad stack) :
simple conceptuellement, facile à utiliser
et performant à l’exécution.
Cet ajout de StateFix et StateInstance est destiné
à gérer les empilements de monades nécessaires
à Calculus.Lambda.Omega.Implicit :
- StateFix permet de paramétrer l’état (State)
d’une monade à état (MonadState) de la pile,
par la pile de monades elle-même
(utile en l’occurence pour maintenir
dans l’état d’une monade d’état de la pile de monades
servant à la résolution des contraintes d’inférence :
une pile des contraintes d’inférence à résoudre,
où chaque contrainte d’inférence référence
la valeur de la pile de monades servant à la résoudre).
- StateInstance permet de collecter les états
des monades à état de la pile de monades
dont le type est une instance d’une classe de types (class) donnée
(utile en l’occurence pour tracer (log) des informations
sur les états d’une pile de monades).
Chapeau bas notamment aux auteurs de monad-classes
(Roman Cheplyaka et Andres Löh)
pour avoir trouvé une aussi élégante et flexible
approche des effets extensibles :
https://ro-che.info/articles/extensible-effects