Les applications doivent manipuler des effets pour être utiles, comme la communication avec le système, avec des utilisateurs ou un service tiers. Mais les effets créent des dépendances fortes dans le code qui ne favorisent pas sa maintenabilité. Le type IO permet de pallier cette difficulté.