Composition based approaches also apply particularly well to shaders, since their main drawback being lack of control flow is not a big issue for shaders.
Shaders are also far more I/O dependent, with direct feedback visually of the result, there is little abstraction like in programming where the visual feedback isn’t (always) direct.