Greetings Programs,

The CSC is hosting a member talk today at 6 PM, in MC 4063. Edmund Noble will be giving a talk titled "Purely Functional Programming with Freely-Generated Domain Specific Languages"; the abstract is at the foot of this email. There will be snacks and drinks at the end of the talk.

In addition, the CSC is hosting ALT+TAB (aka SCP or SAMS), the CSC's version of SASMS, next Wednesday at 6 PM in MC 4063. Several members will be giving short, ~25 minute talks on various CS-related topics. A running list of confirmed talks can be found at If you are interested in giving a talk, please email with the title of your talk, and optionally a brief abstract, ideally by the end of Monday.

Remember that there will be a planned power outage in MC tomorrow (Nov 26) from 7AM to 5PM; CSC machines will be shutting down at 6AM in preparation.

Also, thanks to the Mathsoc Capital Improvement Fund (CIF), the CSC finally upgraded natural-flavours, also known as the shitty machine in the corner of the room that nobody wanted to use! It now has an i7-6700k and 16GB of RAM.

- Calum T. Dalek

Member Talk Abstract:

Dependency injection is an often-used technique in object-oriented programming to easily modify the behaviours of an object by providing it with objects it would have otherwise generated on its own, to increase modularity. Aspect-oriented programming is a related technique which adds additional behaviour ("advice") to existing code, aiming to address cross-cutting concerns which affect wide areas of an application without sacrificing modularity. Dependency injection might not seem a common topic in functional programming, but application modularity is essential to functional programming in a practical setting. A natural analogue to dependency injection and aspect-oriented programming in functional programming comes from a surprising place, and offers superior modularity to both. The free monad (F f) for a type constructor (and domain-specific language instruction set) f provides a syntax tree with internal nodes as domain-specific language instructions, which in combination with coproduct functors, allow domain-specific languages to be composed and combined easily.