Skip to main content


This page will present you all the functions that can be used to pile up things: sounds, patterns, etc... Each function will be presented following the same model:

  • Type signature: how the function is declared on the Haskell side.
  • Description: verbal description of the function.
  • Examples: a small list of examples that you can copy/paste in your editor.



Type: overlay :: Pattern a -> Pattern a -> Pattern a

The overlay function is similar to cat, but combines two patterns, rather than a list of patterns. For example:

d1 $ sound (overlay "bd sn:2" "cp*3") the same as...

d1 $ sound "[bd sn:2, cp*3]"


Type: (<>) :: Pattern a -> Pattern a -> Pattern a

\<\> is the same as overlay described above but in operator form. For example:

d1 $ sound ("bd sn:2" <> "cp*3")


Type: stack :: [Pattern a] -> Pattern a

stack takes a list of patterns and combines them into a new pattern by layering them up - effectively playing all of the patterns in the list simultaneously:

d1 $ stack [ 
sound "bd bd*2",
sound "hh*2 [sn cp] cp future*4",
sound "arpy" +| n "0 .. 15"

This is particularly useful if you want to apply a function or synth control pattern to multiple patterns at once:

d1 $ whenmod 5 3 (striate 3) $ stack [ 
sound "bd bd*2",
sound "hh*2 [sn cp] cp future*4",
sound "arpy" +| n "0 .. 15"
] # speed "[[1 0.8], [1.5 2]*2]/3"


Type: superimpose :: (Pattern a -> Pattern a) -> Pattern a -> Pattern a

superimpose plays a modified version of a pattern 'on top of' the original pattern, resulting in the modified and original version of the patterns being played at the same time. For example this:

d1 $ superimpose (fast 2) $ sound "bd sn [cp ht] hh" the same as this:

d1 $ stack [sound "bd sn [cp ht] hh",
fast 2 $ sound "bd sn [cp ht] hh"


Type: [a -> Pattern b] -> a -> Pattern b

The layer function allows you to layer up multiple functions on one pattern. For example the following will play two versions of the pattern at the same time, one reversed and one at twice the speed.

d1 $ layer [rev, fast 2] $ sound "arpy [~ arpy:4]"

If you want to include the original version of the pattern in the layering, use the id function:

d1 $ layer [id, rev, fast 2] $ sound "arpy [~ arpy:4]"


Type: steps :: [(String,String)] -> Pattern String

steps is like step but it takes a list of pairs like step would and it plays them all simultaneously.

d1 $ s (steps [("cp","x  x x  x x  x"),("bd", "xxxx")])

Building iterations


Type: iter :: Pattern Int -> Pattern a -> Pattern a

iter divides a pattern into a given number of subdivisions, plays the subdivisions in order, but increments the starting subdivision each cycle. The pattern wraps to the first subdivision after the last subdivision is played. Example:

d1 $ iter 4 $ sound "bd hh sn cp"

This will produce the following over four cycles:

bd hh sn cp
hh sn cp bd
sn cp bd hh
cp bd hh sn


iter' does the same as iter but in the other direction. So this:

d1 $ iter' 4 $ sound "bd hh sn cp"

Produces this pattern:

bd hh sn cp
cp bd hh sn
sn cp bd hh
hh sn cp bd