But at some point somewhere in the program, there will still need to be an I/O action which actually displays [[Pixel]]
values - there’s no (safe) escape from the I/O “black boxes” in Haskell. However, there is another option for those who prefer a more denotative approach to effects, at least for I/O: