
I am writing some code for citation support in gitit, and all the #ifdefs I'm using to do conditional compilation are a bit tiresome. Suppose you have the requirement that a certain feature of your software be disable-able at compile time, to avoid having to pull in certain dependencies (which may not be available on all platforms). Disabling a feature may entail removing certain fields from certain constructors (again, to avoid pulling in certain dependencies), and/or removing certain functions from certain modules. What is the best way to do this in Haskell? This problem description suggests that perhaps insights from Aspect-Oriented Programming and/or Software Product Lines may be relevant. However, I haven't heard of much work that relates these concepts to Haskell. Maybe this would be a good topic for an enterprising student? -- Robin