import {Complex} from './type.js' import {Dependency, ImpType} from '../core/Dispatcher.js' type ComplexPredicate = T extends Complex ? (a: T) => boolean : never declare module "./type" { interface ComplexImpTypes { isReal: ComplexPredicate isSquare: ComplexPredicate } } export const isReal = (dep: Dependency<'equal', [T,T]> & Dependency<'add', [T,T]> & Dependency<'isReal', [T]> ): ImpType<'isReal', [Complex]> => z => dep.isReal(z.re) && dep.equal(z.re, dep.add(z.re, z.im)) export const isSquare: ImpType<'isSquare', [Complex]> = z => true // FIXME: not correct for Complex once we get there