Tidal functions can be partially applied (curried) to produce new functions that accept remaining arguments
In Haskell (and Tidal), every function is automatically curryable: calling it with fewer arguments than it expects returns a new function awaiting the rest. every 4 (without a function argument) produces a curried function that applies some-function-to-be-named every 4 cycles. fast 4 similarly produces a function that speeds up its argument by 4. These curried functions can be passed to higher-order functions like every: every 4 (fast 4) reads as ‘every 4 cycles, apply fast-4 to the pattern.’ This is why Tidal code composes so cleanly: most transformation functions are partial applications waiting to be completed.
Examples
-- fast 4 is a curried function that speeds up its argument:
d1 $ every 4 (fast 4) $ sound "bd*2 [bd [sn sn*2 sn] sn]"
-- rev is a complete function (takes one pattern arg):
d1 $ every 4 (rev) $ sound "bd*2 [bd [sn sn*2 sn] sn]"
Assessment
Without running it, explain what every 4 (fast 4) produces as an intermediate value before it receives the pattern. What type does it have, and how does it differ from every 4 (fast 4) $ sound "bd"?