Function Arguments Are Not Function Colors
L'auteur propose de définir une "color" comme une forme de dépendance au changement où modifier une fonction impose des changements à toutes ses appelantes dans la pile d'appels. Contrairement à une modification normale qui ne se propage qu'à l'appelant et peut être encapsulée, une modification colorée saute les appels intermédiaires et contraint toutes les fonctions au-dessus à s'adapter. L'exemple de Go montre que l'ajout d'un paramètre context.Context peut sembler être une color, mais en pratique des mécanismes comme context.Background() brisent très rapidement la propagation et empêchent que ce soit systématiquement une color. L'async n'est pas intrinsèquement une color : selon le langage et son support de l'async/I/O, le phénomène forme plutôt un spectre où certaines formes peuvent être colorées et d'autres non. Haskell illustre les couleurs partielles avec STM, qui force le lifting des fonctions intermédiaires dans le monade approprié (et repose sur IO), tandis que des monades comme State ne sont pas des colors car elles peuvent être contournées et encapsulées.