La réponse courte est que les Flèches sont plus générales que les Monades et sont également de plus en plus lourde à utiliser. Ainsi, vous devez utiliser les Monades chaque fois que vous pouvez, en laissant à l'utilisation des Flèches pour les cas où les Monades ne sont pas applicables.
La "scenic route" suit la réponse.
John Hughes, la personne qui a introduit les Flèches, a publié deux grands papiers que je vous recommande: "la Généralisation des monades de flèches" et "Programmation avec des Flèches". Ces deux articles sont faciles à lire et à fournir la réponse à votre question. Même si certaines personnes ne comprennent pas tous les détails ou le code de ces deux articles, ils vont certainement trouver beaucoup d'informations et d'explications très utiles sur les Monades et des Flèches.
Je vais maintenant mettre en évidence les principaux points de ces articles qui se rapportent à votre question
Lorsque les Monades ont été introduit, les gens pensaient qu'ils étaient tout-puissants. En effet, les Monades pack beaucoup de puissance. Mais à un certain point, il a été constaté qu'il existe des cas où les Monades ne peut pas être appliquée. Ces cas ont à faire avec plusieurs entrées, surtout quand certains intrants sont statiques et certaines entrées sont dynamiques. Ainsi, John Hughes intensifié et a introduit des Flèches.
Les flèches sont plus générales que les Monades. Les flèches sont un sur-ensemble des Monades. Ils peuvent faire tout ce que les Monades et bien plus encore. Mais ils sont aussi plus difficiles à utiliser. John Hughes recommande que vous devriez utiliser Monades chaque fois que vous le pouvez et que vous devez utiliser les Flèches lorsque vous ne pouvez pas utiliser les Monades.
Je suis d'accord avec John Hughes. Je suis également rappelé d'Einstein de la citation "Tout devrait être rendu aussi simple que possible, mais pas plus".
Bien sûr, tout dépend de la situation particulière à portée de main. Laissez-moi vous expliquer.
Supposons que vous êtes l'apprentissage Haskell. Ensuite, il serait une grande tâche pour faire de chaque programme à l'aide d'une approche monadique et de la refaire à l'aide d'une flèche. Quand vous apprenez, vous devriez vous efforcer d'explorer toutes les possibilités et mettre en œuvre toutes sortes d'approches. De cette façon, vous obtenez beaucoup de perspicacité et vous êtes en mesure de comparer les différentes solutions de première main.
Maintenant, supposons que vous souhaitez fournir une bibliothèque à la communauté. Eh bien, vous le devons aux personnes qui vont lire votre code que vous devez utiliser l'approche qui est la plus facile à comprendre et à toujours fait le travail. Vous avez également le devons aux personnes qui vont utiliser votre code que votre solution manque de complexité inutile. De cette façon, votre solution est plus facilement maintenable et moins sujettes à des erreurs et des bugs.
Mais que faire si vous êtes dans un cas limite? Supposons que vous n'êtes pas sûr de savoir si ou non vous aurez besoin de la puissance supplémentaire de Flèches. Alors, que devez-vous faire? Devriez-vous commencer avec une approche monadique et plus tard, passer à une flèche à base de si le besoin s'en fait sentir? Ou devriez-vous commencer avec des Flèches à partir de l'obtenir-aller, d'éviter un coûteux commutateur à mi-chemin à travers le projet?
Encore une fois, ma réponse est d'essayer la première méthode: utilisez des Monades si vous le pouvez. Si par la suite vous découvrez que vous ne pouvez pas utiliser les Monades, vous aurez à subir un coûteux commutateur, où vous devrez redémarrer et refaire le projet afin d'utiliser les Flèches. Cette approche sera certainement besoin de plus de temps et d'autres ressources à partir de votre part. Mais vous savez que vous avez fait la bonne chose, c'est pour essayer de fournir le plus simple, le plus clair, moins complexe solution possible.
En évitant la complexité inutile, est la chose la plus importante. Croyez le ou non, c'est la raison concepts (tels que la composition de fonctions, les Monades et des Flèches) de la Catégorie de la Théorie ont été introduites à l'Informatique. Ironique?