Les monades sont l'une des innovations majeures de la PF qui ont entraîné "l'explosion" de l'intérêt.
En janvier 1992, Philip Wadler a écrit un article intitulé « L’essence de la programmation fonctionnelle» qui introduisait les monades dans la programmation fonctionnelle en tant que moyen de traiter les entrées-sorties.
Le problème majeur des langages de programmation fonctionnels purs, paresseux était l’utilité de traiter avec les E / S. C’est l’un des membres de la «formation maladroite» dans la programmation, car «la paresse et les effets secondaires sont, d’un point de vue pratique, incompatibles. Si vous voulez utiliser un langage paresseux, il doit s’agir d’un langage purement fonctionnel; si vous voulez utiliser des effets secondaires, vous feriez mieux d'utiliser un langage strict. " Référence
Le problème avec IO avant les monades était que le maintien de la pureté n'était pas possible pour les programmes réellement utiles. Par IO, nous entendons tout ce qui concerne les changements d'état, y compris les entrées et les sorties de l'utilisateur ou de l'environnement. En programmation fonctionnelle pure, tout est immuable, pour permettre la paresse et la pureté (sans effets secondaires).
Comment les monades résolvent-elles le problème de l'IO? Eh bien, sans trop parler des monades, elles prennent essentiellement le "Monde" (l'environnement d'exécution) en entrée de la monade et produisent un nouveau "Monde" en sortie, ainsi que le résultat: tapez IO a = World -> (a, Monde).
La PF est donc entrée de plus en plus dans le grand public, car le plus gros problème, IO (et d'autres), a été résolu. L'intégration dans les langages OO existants s'est également produite, comme vous le savez. LINQ, ce sont des monades, par exemple, de part en part.
Pour plus d'informations, je vous recommande de lire sur les monades et les documents référencés dans ma réponse.