I like to think of Applicative Functors, Monads, etc as the Design Patterns of functional languages (though I've developed most of my understanding by applying these ideas in JavaScript).
A nice way to think about how they can be used (and the difference between parallel and sequential evaluation discussed towards the end of the article) is in handling promises:
The parallel or sequential composition of a list of promises returns a promise of a list.
The monadic composition resolves each promise sequentially (via the Haskell operator `sequence` or as a cascade of JavaScript `.then` calls).
The parallel applicative composition resolves all promises simultaneously.
Hey thanks for listening =)
Although I own some fun toys (e.g. Nord Modular), most of my stuff is just made in Ableton with the suite effects, Max 4 Live samplers, etc. And the synth I use for pretty much everything from pads to toms to stabs to leads is the Audiorealism ABL Pro. Such a good synth.
If anyone is interested, the default language for writing Supercollider programs is based on Smalltalk. The standard library is well organised and was a revelation to me on how to use OO properly.
The main mechanisms used for composition are lazy streams (via generators), events (via prototype-like composition), and higher level structures (via classes).
Of course the client has been replaced by Clojure in Overtone, and I'm pretty sure I've seen JavaScript clients in the wild as well...
It's worth pointing out that the underlying synthesis and routing engine is extremely versatile, with signal graphs compiled from a user-authored OO AST.
I'm looking forward to returning to Supercollider next year as I'm hoping to return to study sound design and composition. My stuff is currently at soundcloud.com/slex...
Another series by Curtis, "The Century of the Self", explores similar themes in the context of psychology (Freud and Reich), propaganda (Bernays), and the rise of market-based democracy:
A nice way to think about how they can be used (and the difference between parallel and sequential evaluation discussed towards the end of the article) is in handling promises:
The parallel or sequential composition of a list of promises returns a promise of a list.
The monadic composition resolves each promise sequentially (via the Haskell operator `sequence` or as a cascade of JavaScript `.then` calls).
The parallel applicative composition resolves all promises simultaneously.