refactor: change onType to match and take only one pattern and result (#22)
All checks were successful
/ test (push) Successful in 17s
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>
This commit is contained in:
parent
491e207fad
commit
236f46c0c0
22 changed files with 147 additions and 135 deletions
|
@ -1,10 +1,10 @@
|
|||
import {Complex} from './Complex.js'
|
||||
import {onType} from "#core/helpers.js"
|
||||
import {match} from "#core/helpers.js"
|
||||
import {Returns} from "#core/Type.js"
|
||||
import {Any} from "#core/TypePatterns.js"
|
||||
|
||||
export const complex = onType(
|
||||
Any, (math, T) => {
|
||||
export const complex = [
|
||||
match(Any, (math, T) => {
|
||||
const z = math.zero(T)
|
||||
if (math.hasnan(T)) {
|
||||
const isnan = math.isnan.resolve([T])
|
||||
|
@ -15,8 +15,8 @@ export const complex = onType(
|
|||
})
|
||||
}
|
||||
return Returns(Complex(T), r => ({re: r, im: z}))
|
||||
},
|
||||
[Any, Any], (math, [T, U]) => {
|
||||
}),
|
||||
match([Any, Any], (math, [T, U]) => {
|
||||
if (T !== U) {
|
||||
throw new RangeError(
|
||||
'mixed complex types disallowed '
|
||||
|
@ -24,5 +24,4 @@ export const complex = onType(
|
|||
}
|
||||
return Returns(Complex(T), (r, m) => ({re: r, im: m}))
|
||||
})
|
||||
|
||||
|
||||
]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue