Envoyé par
InOCamlWeTrust
Une fois dit ça, on comprend mieux que dans un programme Haskell standard il est difficile, voire impossible, de prédire l'ordre d'évaluation des arguments. En ce sens, ne serait-ce qu'afficher à l'écran des messages dans un certain ordre ou devoir faire des opérations les unes après les autres de façon explicite, est impossible.
C'est pour celà que les monades ont été introduites. Les monades sont LA façon dans un langage paresseux comme Haskell d'effectuer des actions ou d'évaluer des valeurs dans un ordre prédéterminé.
Là où les choses deviennent un peu plus difficiles à saisir, c'est que les monades sont elles-mêmes des valeurs ! Pour ne pas casser l'aspect paresseux du langage, il est nécessaire d'enfermer cette succession d'évaluations dans une valeur particulière, elle-même paresseuse. C'est ce que l'on appelle en informatique une fermeture. La même notion existe pour OCaml, mais les valeurs paresseuses sont créées de façon explicite.