Aside from shadertoy I use https://glslsandbox.com/ (for some reason it has https errors now). It's the same concept and it has a lot of submissions that are more basic than shardertoy where you can easily change lines and see what happens.
My intuition for these kind of shaders: They are just pure functions mapping an x,y coordinate to a color (optionally making use of time and cursor position). From this you can derive anything, like drawing a circle by choosing black or white depending on the distance from the center. There is a lot of intuition to gain and it's fun playing around, because as long as it compiles you will see something and you are likely to be surprised about what you accidentally made. Very rewarding.
Well, I pointed out at the beginning that one can use recursion, and the implementation of the `while` construct itself uses recursion as well (in fact, you can't implement `while` without it in Elixir).
In any case, expressing the equivalent of a `while` loop with predicates and timeouts is quite syntactically noisy in Elixir - it is certainly doable, but much less clear than the imperative equivalent.