typocomath/src/experiment/arithmeticInfer.ts

20 lines
708 B
TypeScript

import { $reflect } from '../core/$reflect.js'
import { Dependencies } from '../interfaces/type.js'
// unaryMinus dep is just for the experiment
// FIXME: the typescript plugin should resolve Dependencies<'multiply' | 'unaryMinus', T>
export const square = $reflect(<T>(dep: Dependencies<'multiply' | 'unaryMinus', T>): (a: T) => T =>
z => dep.multiply(z, z)
)
// export const square2 = function $reflect<T>(dep: Dependencies<'multiply' | 'unaryMinus', T>) {
// return (z: T) => dep.multiply(z, z)
// }
// export const square = $reflect(<T>(dep: {
// multiply: (a: T, b: T) => T,
// unaryMinus: (x: T) => T, // just for the experiment
// }): (a: T) => T =>
// z => dep.multiply(z, z)
// )