Commit graph

7 commits

Author SHA1 Message Date
47370cec9e feat: Index behaviors by return typing strategy
* Adds the concept of, and options for, the return typing strategy
  * adds the strategy at the beginning of every behavior index
  * adds the strategy as an additional argument to resolve
  * No actual use of return type strategy so far
  * Sets up eslint
  * Fixes eslint errors
2025-04-26 00:20:30 -07:00
aad62df8ac feat: methods on Complex (#24)
All checks were successful
/ test (push) Successful in 17s
Adds all of the pocomath functions on Complex that do not depend on any unimplemented types or config properties, except quotient and roundquotient, where the design is murky. To get this working, adds some additional features:
  * Allows conversions to generic types, with the matched type
    determined from the return value of the built convertor
  * Adds predicate-based type patterns
  * Adds conversion from any non-complex type T to Complex(T)
  * Adds check for recursive loops in resolve (a key/signature depending on itself)

Reviewed-on: #24
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-25 14:17:34 +00:00
236f46c0c0 refactor: change onType to match and take only one pattern and result (#22)
All checks were successful
/ test (push) Successful in 17s
Pursuant to #12. Besides changing the name of onType to match, and only allowing one pattern and result in `match()`,
this PR also arranges that in place of an onType with lots of alternating PATTERN, VALUE, PATTERN, VALUE arguments, one now exports an _array_ of `match(PATTERN, VALUE)` items.

Doesn't quite fully resolve #12, because there is still the question of whether `match(...)` can be left out for a behavior that literally matches anything (current behavior), or whether `match(Passthru, behavior)` should be required for such cases.

Reviewed-on: #22
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-22 05:01:21 +00:00
70ce01d12b feat: config and approximate equality (#19)
All checks were successful
/ test (push) Successful in 17s
Establishes a global config object for a TypeDispatcher instance, so far
  with just properties representing comparison tolerances. Begins a
  "relational" group of functions with basic approximate equality, and
  an initial primitive ordering comparison. Ensures that methods that
  depend on properties of `config` will be properly updated when those
  properties change.

Reviewed-on: #19
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-16 04:23:48 +00:00
27fa4b0193 feat: Introduce BooleanT and boolean functions (#17)
All checks were successful
/ test (push) Successful in 17s
This PR adds a boolean section, as well as an isNaN predicate on numbers. In a TypeDispatcher, when BooleanT is present, isNaN returns a BooleanT. However, in a numbers-only TypeDispatcher, it returns 1 or 0 instead. Moreover, when booleans are subsequently added to a numbers-only instance, isNaN properly reconfigures itself to return BooleanT.

No predicates that depend on approximate equality testing or a configuration object are implemented in this PR.

This PR also implements type matching and dispatching with implicit conversions, and adds an implicit conversion from BooleanT to NumberT.

Reviewed-on: #17
Co-authored-by: Glen Whitney <glen@studioinfinity.org>
Co-committed-by: Glen Whitney <glen@studioinfinity.org>
2025-04-13 16:29:51 +00:00
69ef928b6e refactor: Switch to 'map-like object keyed by string and type vector' format
See https://code.studioinfinity.org/glen/nanomath/wiki/Item-Specifications.
  Also stubs out the TypeDispatcher, mocking the merge function, so we
  can see that all of the proper things will be added.

  Ready for initial implementation of the TypeDispatcher.
2025-04-02 11:22:53 -07:00
040ec377a1 feat: add type definition and other function categories for number 2025-03-30 20:00:07 -07:00