
Vivian McPhail wrote:
What I want to push is a 'mathematically sound' numeric prelude. A proper numerical prelude should have bona fide mathematical obects like groups, rings, and fields underlying common numerical classes. It would be edifying to the student who discovered that the particular data type he is using is an inhabitant of a known class and can thus take advantage of known properties, presupplied as class methods. Reasoning and communication about programs, data types, and functions would be enhanced.
Yes, except that there are not as many groups, rings and fields out there as you think. For one thing, Float and Double are not in any of those. The best you can do with Float and Double is NonAssociativeAlgebra, which is unlikely to be 'edifying'. At least Integer is a proper ring. There is only one field that I am aware of in Haskell (Rational Integer). [Which is sad since Z_p is so easy to code up, and generally extremely useful]. Some classes would become even more important: monoid, groupoid, semi-group, loop (semi-group with identity), etc. But all of those are, to the average programmer (and many a mathematician), just as scary as Monad. And personally, the place my semi-groups show up are not in my data-types, but in my *types*. Jacques