Learn functional programming and the Haskell programming language through algorithmic music composition and virtual instrument design