The data flow of supplies contains two parts—the supplier that emits data and the tap that receives it. Perl 6's reactive programming model is a thread-safe implementation of the Observer design pattern.
Let us create our first on-demand supply using the supply keyword:
supply {
emit($_) for 'a'..'e';
}
The supply is here but it does not emit any data yet because there is no demand. You can easily see this if you add a print instruction to the loop:
supply {
for 'a'..'e' {
emit($_);
say "Emitted $_";
}
}
sleep 2;
The program just silently quits after 2 seconds.
To make the supply generate data, we need to create a tap. The supply block returns a value of the Supply type, and you can call the tap method on it to pass the code that will be executed in response to the data emitted...