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
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe