pocomath/src/number
Glen Whitney 1444b9828f refactor(Complex): Now a template type!
This means that the real and imaginary parts of a Complex must now be
  the same type. This seems like a real benefit: a Complex with a number real
  part and a bigint imaginary part does not seem sensible.

  Note that this is now straining typed-function in (at least) the following
  ways:
  (1) In this change, it was necessary to remove the logic that the square root
      of a negative number calls complex square root, which then calls back
      to the number square root in its algorithm. (This was creating a circular
      reference in the typed-function which the old implementation of Complex
      was somehow sidestepping.)
  (2) typed-function could not follow conversions that would be allowed by
      uninstantiated templates (e.g. number => Complex<number> if the latter
      template has not been instantiated) and so the facility for
      instantiating a template was surfaced (and for example is called explicitly
      in the demo loader `extendToComplex`. Similarly, this necessitated
      making the unary signature of the `complex` conversion function explicit,
      rather than just via implicit conversion to Complex.
  (3) I find the order of implementations is mattering more in typed-function
      definitions, implying that typed-function's sorting algorithm is having
      trouble distinguishing alternatives.

  But otherwise, the conversion went quite smoothly and I think is a good demo
  of the power of this approach. And I expect that it will work even more
  smoothly if some of the underlying facilities (subtypes, template types) are
  integrated into typed-function.
2022-08-06 08:27:44 -07:00
..
Types feat: Implement subtypes 2022-07-30 04:59:04 -07:00
abs.mjs fix(Types): Move distinct types into distinct identifiers 2022-07-25 11:56:12 -07:00
add.mjs feat: Template operations (#41) 2022-08-01 10:09:32 +00:00
all.mjs feat(install): Allow plain functions 2022-08-02 00:47:37 -07:00
compare.mjs feat: Template operations (#41) 2022-08-01 10:09:32 +00:00
invert.mjs fix(Types): Move distinct types into distinct identifiers 2022-07-25 11:56:12 -07:00
isZero.mjs feat: Implement subtypes 2022-07-30 04:59:04 -07:00
multiply.mjs feat: Implement subtypes 2022-07-30 04:59:04 -07:00
native.mjs feat: Template types (#45) 2022-08-05 12:48:57 +00:00
negate.mjs fix(Types): Move distinct types into distinct identifiers 2022-07-25 11:56:12 -07:00
one.mjs fix(Types): Move distinct types into distinct identifiers 2022-07-25 11:56:12 -07:00
quotient.mjs feat: Implement subtypes 2022-07-30 04:59:04 -07:00
roundquotient.mjs feat: Implement subtypes 2022-07-30 04:59:04 -07:00
sqrt.mjs refactor(Complex): Now a template type! 2022-08-06 08:27:44 -07:00
zero.mjs fix(Types): Move distinct types into distinct identifiers 2022-07-25 11:56:12 -07:00