Writing audio files to the file system; Modeling a domain specific problem using Haskell’s data types; Building abstractions and high-level structures around low-level implementations; Designing a domain specific language (DSL) within Haskell;