
So my questions are: (a) is there a common functional programming pattern that corresponds to vector space transformations so that a function defined over one space can be used in another, and (b) if so, are there any not-too-heavy papers or articles discussing this pattern?
Many times when you have a pair of functions: f : S -> T g : T -> S you find that they form a projection-embedding pair: f . g = id g . f <= id where the <= ordering typically indicates loss of information. For example, read and show are related this way with the read function losing information about whitespace, comments, etc. Various kinds of lookup tables and set representations (linear lists, arrays, binary trees, etc.) are also related in this way. A useful generalization is an "adjunction" or "galois connection". Section 3 of this paper has a concise definition and, more usefully, helps give you some intuition about them. A reflection on call-by-value, Amr Sabry and Philip Wadler. http://www.research.avayalabs.com/user/ wadler/topics/call-by-need.html#reflection Other people can probably suggest better papers. Hope this helps, -- Alastair Reid www.haskell-consulting.com