On 5 Feb 2012, at 16:45, Lars-Henrik Eriksson wrote: > 5 feb 2012 kl. 17.24 skrev Rob Arthan: > >> On 5 Feb 2012, at 11:51, David Matthews wrote: >> >>> On 03/02/2012 15:44, Phil Clayton wrote: >>>> It appears that Poly/ML overloads operators + - < <= >= > for Time.time >>>> but they shouldn't be, according to the Basis Library. >>>> http://www.standardml.org/Basis/top-level-chapter.html#section:3 >>>> Perhaps they were overloaded once upon a Time.time... >>> >>> Yes, it looks as though strictly speaking you're right. It does seem >>> strange, though, to have these operators and not include them in the >>> overloading. I'm rather reluctant to remove the overloading but I >>> appreciate as it stands it doesn't comply with the definition. >> >> This must have been just an oversight in the Basis Library design. It is >> crazy that opening the structure Time.Time prevents you using the natural >> syntax for arithmetic on the real and integer types that you use to >> construct values of the abstract type the structure implements. > > That is because of the semantics of Open and has nothing to do with Time > specifically. Opening any library which has its own versions of the > overloaded math operations will remove the overloading. Witness: > > Poly/ML 5.4.1 Release >> open Real; > [...output omitted....] >> 1+1; > Error-Type error in function application. > Function: + : real * real -> real > Argument: (1, 1) : int * int > Reason: > Can't unify int (*In Basis*) with real (*In Basis*) > (Different type constructors) > Found near 1 + 1 > Static Errors
You are right. What a mess! Regards, Rob.
_______________________________________________ polyml mailing list [email protected] http://lists.inf.ed.ac.uk/mailman/listinfo/polyml
