Polymorphy & Functors (lifting)

One of the amazing new views that opened up for me after studying
Haskell is the ubiquitous presence of morphisms that take some
computation from one domain into a richer domain.
Often, this can be combined with type classes, making the lift
operator automatic. A class - a collection of operations on
constrained types - often is defined for a single concrete base type,
with other instances of the class built from composite objects.
I.e. number -> vector.
Now, combine this with laziness and domains can become infinite
(i.e. power series, derivative towers, ...) and a lot of the
mathematical objects useful for numerics/DSP can be represented quite
directly in an abstract way, to be ``instantiated into'' programs
using abstract interpretation.