If you look at the output of
:t val1, you see this:
val1 :: Pattern Int
val1 can only be given to functions that can work with patterns of integers. Looking at
fix :: (ControlPattern -> ControlPattern) -> ControlPattern -> ControlPattern -> ControlPattern
That first parameter is a function that takes a pattern of controls as input, and gives another one as output.. So you'd need a function that turns a pattern of numbers into such a function.
pickF looks like it might help, it lets you pick a function from a list, using a pattern of integers:
pickF :: Pattern Int -> [Pattern a -> Pattern a] -> Pattern a -> Pattern a
So something like this should work:
d1 $ slow 2 $ fix (pickF val1 [id, fast 2, fast 4] ) (n "") $ n "0 1 2 3 4 5 6" # sound "arpy"
Looking at the repeatCycles type:
repeatCycles :: Int -> Pattern a -> Pattern a
That first parameter is an 'int', and not a pattern of ints. Actually it's only in the last couple of years that you've been able to use patterns as parameters in this way in Tidal.. (the inner workings of this are quite something to behold, it's amazing that it works so well in general..) So this is kind of a bug in Tidal that this parameter isn't 'patternable'. I've made a note to fix it https://github.com/tidalcycles/Tidal/issues/645