Author: colomon Date: 2010-07-16 20:39:33 +0200 (Fri, 16 Jul 2010) New Revision: 31735
Modified: docs/Perl6/Spec/S32-setting-library/Numeric.pod Log: [spec] Say a bit about Numeric operators and Bridge. Modified: docs/Perl6/Spec/S32-setting-library/Numeric.pod =================================================================== --- docs/Perl6/Spec/S32-setting-library/Numeric.pod 2010-07-16 18:19:27 UTC (rev 31734) +++ docs/Perl6/Spec/S32-setting-library/Numeric.pod 2010-07-16 18:39:33 UTC (rev 31735) @@ -56,10 +56,16 @@ C<Numeric> is a role for everything that's a scalar number. So C<Num>, C<Int>, C<Rat>, C<Complex> and other numeric types do that role. However it is an -abstract interface, so C<$number.WHAT> will never return C<Numeric>. Users who -provide their own scalar numeric types are encouraged to implement the -C<Numeric> role. +abstract interface, so C<$number.WHAT> will never return C<Numeric>. +Users who provide their own scalar numeric types are encouraged to implement the +C<Numeric> role. It is intended that such types such support the basic arithmetic +operators to the extent possible, as well as C<==>. In addition, it is hoped that +comparison operators will at least return consistent results, even if there is no +sensible mathemtical ordering of your type. That allows functions like sort to +not choke and die if they are handed a value of your type. (See also the C<Real> +role for scalar numeric types that represent real numbers.) + The following are all defined in the C<Numeric> role: C<Numeric> provides some constants in addition to the basic @@ -201,6 +207,15 @@ a real scalar number (i.e. neither C<Complex> nor vector-like). For example C<Num>, C<Int>, C<Bool> and C<Rat> implement the C<Real> role. +Users who provide their own scalar real numeric types are encouraged to implement the +C<Real> role. Because all C<Real> types are well-ordered, it is desirable that any two +C<Real> types be mutally compatiable, even if they are not aware of each other. The +current proposal requires you to define a C<Bridge> method in your C<Real> type, which +converts your type into a neutral C<Real> type by restating it in terms of the fundamental +PerlĀ 6 types and calling C<Bridge> on them. This then makes the default C<Real> methods +and operators all work with your C<Real> type. While the name of this method may changed, +it is hoped that something like this will remain in the spec. + =over =item Complex