J'ai commencé à utiliser Scalaz 7 Validation et/ou disjonction pour traiter une liste d'opérations susceptibles d'échouer et gérer leur résultat.
Il existe deux cas bien documentés pour ce type d'utilisation :
1/ Vous voulez vérifier une liste de conditions sur quelque chose, et accumuler chaque erreur, le cas échéant. Ici, on va toujours à la fin de la liste, et en cas d'erreur, on a un échec comme résultat global. Et c'est un foncteur applicatif au travail.
2/ Vous voulez exécuter plusieurs étapes qui peuvent échouer, et vous arrêter à la première qui échoue. Ici, nous avons une monade qui se marie bien avec la for-comprehension de Scala.
Donc, j'ai deux autres cas d'utilisation qui sont parmi les mêmes lignes, mais qui ne semblent pas bien marcher sur un cas précédent : Je veux traiter une liste d'étapes, avec possibilité d'échec, et accumuler les résultats des erreurs et des succès (ex : c'est une liste de modifications de fichiers, les erreurs peuvent se produire parce que c'est le monde extérieur, et les succès sont des patchs que je veux garder pour plus tard).
La différence entre les deux cas d'utilisation réside uniquement dans le fait que je veux m'arrêter tôt (à la première erreur) ou aller à la fin de la liste.
OK, alors quelle est la bonne chose à faire pour cela ?
(écrire la question m'amène à penser qu'il s'agit d'un simple foldLeft, n'est-ce pas ? Je vais laisser la question ici pour valider, et si quelqu'un d'autre se pose la question)