Here's a function I made that quickly creates a lot of variation for patterns, specially when used in its list form. This function basically takes a number, divides the pattern (or rather, the current cycle) into that amount of pieces, and then reverses the order of those pieces. The list form allows you to easily do this concatenatively.
revOn' vs f = case vs of
[] -> f
(x:xs) -> inside x rev $ rev $ revOn' xs f
revOn x = revOn' [x]
drawLine $ rev $ "0..7"
-- |76543210|76543210
drawLine $ revOn 2 $ "0..7"
-- |45670123|45670123
drawLine $ revOn 4 $ "0..7"
-- |67452301|67452301
drawLine $ revOn' [2,4] $ "0..7"
-- |23016745|23016745
The divisor can be fractional and can even be patterned, be it as part of the list or not. Which makes it super easy to create super scrambled, complex variations of patterns that are not random.
do
d1 $ revOn' [8,0.5,2,"<1 4>"] $ note (scale "phrygian" "0..7") # s "arpy" # room 0.3
d2 $ "bd"
Strudel version:
// will add soon