On Saturday 01 April 2006 11:53 am, Brian Hulley wrote: > Claus Reinke wrote: > > the usual way to achieve this uses the overloading of Nums in Haskell: > > when you write '1' or '1+2', the meaning of those expressions depends > > on their types. in particular, the example above uses 'T Double', not > > just 'Double'. > > However there is nothing in the functions themselves that restricts their > use to just T Double. Thus the functions can be compared for equality by > supplying an argument of type T Double but used elsewhere in the program > with args of type (plain) Double eg:
Overloaded functions instantiated at different types are not (in general) the same function. If you mentally do the dictionary-translation, you'll see why. In particular for f, g :: XYZ a => a -> b, and types n m such that (XYZ n) and (XYZ m), f :: (n -> b) === g :: (n -> b) does *not* imply f :: (m -> b) === g :: (m -> b) That is where your argument falls down. Rob Dockins _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
