On-demand supplies
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:
supply { emit($_) for 'a'..'e'; }.tap({ .say; });
This time, the program prints a few lines with the letters from a
to e
. Let us open a tap in our "debugger" program...