In Tidal, $ is a low-priority function application operator that avoids wrapping the final argument in parentheses
The $ operator in Haskell (and TidalCycles) applies the function on its left to the expression on its right. Because $ has the lowest possible precedence, everything on its right is evaluated first. This means every 3 (fast 2) $ sound "bd" is equivalent to every 3 (fast 2) (sound "bd") — it passes the entire sound pattern as the final argument to every. It only works for the final argument; attempting every 3 $ fast 2 $ sound "bd" fails because it tries to pass fast 2 $ sound "bd" as every’s second argument. When Tidal errors, previously running patterns continue — useful for live coding.
Examples
d1 $ sound "bd sd" — $ passes the sound pattern to d1. d1 $ fast 2 $ sound "bd sd" — nested $ chains two applications. d1 $ every 3 (fast 2) $ sound "bd" — correct use with non-final arg in parens.
Assessment
Explain why d1 $ every 3 $ fast 2 $ sound "bd" fails. Rewrite it correctly. What does Tidal do when an error occurs during live performance?