
On Mon, Mar 25, 2013 at 12:30 AM, Costello, Roger L.
How do I design modules so that they may be part of other larger systems? Are there any articles that give guidelines on how to do this? What are your thoughts on how to do this?
For a rare piece of insight, you could start here: http://lukepalmer.wordpress.com/2010/11/23/encapsulation-considered-harmful/ There's also the following nugget here [1]: "A language “is reusable” (to abuse language a bit) if code written in that language can be easily reused. This “obvious” statement is hiding something very important; namely, reused how? For what? We are in an unfortunate situation in programming: code is designed to be reused in a particular way, and if you want to reuse it in a different way you are pretty much out of luck. An OO widget library is designed for the addition of new types of widgets, but if you want to reuse a program written in the library on a new platform you are in for a lot of work. A functional drawing library is designed so that you can transform and export your drawings in an open-ended variety of ways, composing new ways out of old ones; but if you need to draw a circle you have to build it out of lines, even if there is a much better way to draw a circle on your target. (This is essentially the expression problem)." Many Haskellers take after Knuth: "I also must confess to a strong bias against the fashion for reusable code. To me, “re-editable code” is much, much better than an untouchable black box or toolkit." Hence the proliferation of similar packages on Hackage. [1] http://lukepalmer.wordpress.com/2011/09/15/my-paradigm-is-better-than-your-p... -- Kim-Ee