From 0ea786dcc22985df8559aefc31cc3aa464783df2 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Wed, 4 Jan 2023 14:06:30 +0100 Subject: [PATCH] chore: show how to inject multiple instances of the same function (WIP) --- src/Complex/arithmetic.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Complex/arithmetic.ts b/src/Complex/arithmetic.ts index 900e2a1..93d1559 100644 --- a/src/Complex/arithmetic.ts +++ b/src/Complex/arithmetic.ts @@ -78,11 +78,14 @@ export const divide = // in fact, we need `add_real` on both T and Complex, hence the dependency // with a custom name, not generated via Dependencies<...> export const sqrt = - (dep: Dependencies<'add' | 'equal' | 'conservativeSqrt' | 'unaryMinus', - RealType> - & Dependencies<'zero' | 'addReal' | 'complex', T> + (dep: Dependencies<'equal' | 'conservativeSqrt' | 'unaryMinus', RealType> + & Dependencies<'zero' | 'complex', T> & Dependencies<'absquare' | 're' | 'divideReal', Complex> - & {add_complex_real: Signature<'addReal', Complex>}): + & { + addNumber: Signature<'addReal', T>, // TODO: should be possible to use Signature<'add'> here + addReal: Signature<'add', RealType>, + addComplex: Signature<'addReal', Complex> // TODO: should be possible to use Signature<'add'> here + }): Signature<'sqrt', Complex> => z => { const myabs = dep.conservativeSqrt(dep.absquare(z)) @@ -91,10 +94,10 @@ export const sqrt = if (dep.equal(myabs, negr)) { // pure imaginary square root; z.im already zero return dep.complex( - dep.zero(z.re), dep.addReal(z.im, dep.conservativeSqrt(negr))) + dep.zero(z.re), dep.addNumber(z.im, dep.conservativeSqrt(negr))) } - const num = dep.add_complex_real(z, myabs) - const denomsq = dep.add(dep.add(myabs, myabs), dep.add(r, r)) + const num = dep.addComplex(z, myabs) + const denomsq = dep.addReal(dep.addReal(myabs, myabs), dep.addReal(r, r)) const denom = dep.conservativeSqrt(denomsq) return dep.divideReal(num, denom) }