Okay so this might a super naive question but I'm not really into the programming languages world, but looking up the manual for all the functions in tidal I couldn't find a way of understanding how to interpret these terms, which lay beside every function. like if I read lpf :: Pattern Double -> ControlPattern, how should I actually use it? Hope I've been somewhat clear, thanks in advance to whoever will read me!
Hi! Those are the type signatures for each function, describing the data types for the function’s inputs and outputs. This documentation page should help explain things further.
I would like to extend the answer from the documentation (so looking to the documentation from @mindofmatthew first, would be useful).
The documentation tells you (correctly), that the last signature element is the return value. So for examlpe
:t fast 2 -- fast 2 :: Pattern a -> Pattern a
fast 2 expects one more pattern to return a pattern.
When we look into
d1 then we will see, why something like
d1 $ fast 2 will produces an error:
:t d1 -- d1 :: Pattern ValueMap -> IO ()
d1 expects the specific
Pattern ValueMap and this is equal to
ControlPattern and returns an IO() (creates the OSC messages as a stream inside Tidal) type.
type ControlPattern = Pattern ValueMap
That means you need the result type
ControlPattern to use i.e.
d1. When you look to functions like
lpf etc. then you see why
d1 $ s "bd" or
d1 $ lpf 3000 works:
:t s --s "Pattern String -> ControlPattern :t s "bd" -- s "bd" :: ControlPattern
Pattern ValueMap you can use it with d1
:t d1 $ s "bd" -- d1 $ s "bd" :: IO()
I think this is everything you need to know for understanding the usage of ControlPattern. Everything beside this goes deeper to the innards I guess