[Haskell-cafe] Re: Numeric type classes

Jacques Carette carette at mcmaster.ca
Thu Sep 14 15:54:21 EDT 2006

David Menendez wrote:
>>  * Having (+) work on lists, tuples and all the other monoids would
>>    make error messages more complicated.
> It gets worse than that. Imagine trying to explain to someone why "1 +
> sin" is actually "\a -> const 1 a + sin a".
It isn't that hard - it is done routinely in mathematics courses.  In 
fact, that is what 1+sin means in Maple today (and has for 25 years).  
It is also what it means in MuPAD.  AFAIK, that is also what 1+Sin means 
in Mathematica.  That is what polymorphism is all about! [This is really 
equational-theory polymorphism rather than parametric polymorphism, but 
that's a minor detail, since Monad polymorphism is _also_ 
equational-theory polymorphism].

This kind of polymorphism [where you add the 'right number' of arrows on 
the left] is quite useful.  Things like differential operators become 
quite tiresome to write down if you have to pedantically spell 
everything out, even though there is only one 'sensible' way to 
interpret a given expression [1].

In the very same way that fromInteger can project a literal integer into 
other typeclasses, one can project values into spaces of functions by 
just "adding arrows on the left" (ie exactly what const does).  It is 
possible to make this quite formal, but you need Natural(s) (as an 
additive monoid) on the type level, and then be able to be polymorphic 
over _those_ to do make it all work.  It should even be decidable [but 
that part I have not checked].  Something I should write up one of these 
days, but in the meantime go read [1]!


[1] Bjorn Lisper and Claes Thomberg have already investigated something 
very close to this, see

More information about the Haskell-Cafe mailing list