it sometimes helps to look at (instead of: listen to) events. If you just evaluate the pattern, you see the events of its first cycle:
"a b c":: Pattern String
(0>β
)|"a"
(β
>β
)|"b"
(β
>1)|"c"
For some patterns, like the one you asked about, you want to see several cycles, so you can do this
queryArc ( every 2 (rot "<1 3 2>") ("a b c":: Pattern String) ) $ Arc 0 8
[[((1,1),(2,1)),((2,1),(4,1))](0>β
)|"b",[((3,1),(4,1)),((2,1),(4,1))](β
>β
)|"c",...
but then the output needs some re-formatting, e.g.,
mapM_ (\e -> print(part e, value e)) $ flip queryArc (Arc 0 8) $ every 2 (rot "<1 3 2>") ("a b c":: Pattern String)
(0>β
,"b")
(β
>β
,"c")
(β
>1,"a")
(1>1β
,"a")
(1β
>1β
,"b")
(1β
>2,"c")
...
You can avoid this extra output processing by compressing the pattern into one cycle:
fast 8 $ every 2 (rot "<1 3 2>") ("a b c":: Pattern String)
(0>1/24)|"b"
(1/24>1/12)|"c"
(1/12>β
)|"a"
(β
>β
)|"a"
(β
>5/24)|"b"
(5/24>ΒΌ)|"c"
...
but then you have to un-compress the timing information (in your head, while reading the output)
NB - Ultimately, look at the code, e.g., every
is defined at https://github.com/tidalcycles/Tidal/blob/main/src/Sound/Tidal/Core.hs#L404
That gives you the truth, but that doesn't necessarily make it easier, because the implementation may use functions that are not very much visible on the surface, in this case, innerJoin
https://github.com/tidalcycles/Tidal/blob/main/src/Sound/Tidal/Pattern.hs#L463