
Miguel said:
Well, that's the whole point of mathematics, isn't it?
Abstraction is common to mathematics and computing. But in computing the abstraction often follows lines that seem obvious. For example a GUI library might have a Widget class and people can immediately identify various regions of the screen with Widgets and know that when they want a new kind of device in their GUI it's time to define a widget. Although the Widget class may be technically defined by the interface it exposes, in practice people just think "a gadget that can appear on the screen". Even someone who has never programmed can probably quickly guess what kinds of things correspond to instances of the Widget class. But mathematics is full of abstractions that aren't like this. Times modulo 24 hours and the way a closed loop can travel around a knot both form a group. The thing they have in common is that there's a binary operation with identity and inverses. Sometimes it can be more confusing to try to find a snappy English phrase that sums them up without restating the definition. Many common Haskell type classes lean towards the latter kind of abstraction. -- Dan