/** * A module for making uniform APIs for similar operations across different typeclass * instances. For example, `_(a, "+", b)` could be applied to a rational Field instance, * or a matrix AbelianGroup instance for adding together two fractions or matricies respectively. * * @since 1.0.0 */ import * as Eq from 'fp-ts/Eq'; import * as Fld from 'fp-ts/Field'; import * as Mn from 'fp-ts/Monoid'; import * as Rng from 'fp-ts/Ring'; import * as Ord from 'fp-ts/Ord'; import * as TC from './typeclasses'; /** * @since 1.0.0 * @category Model */ export declare type MonoidSymbol = '<>'; /** * @since 1.0.0 * @category Model */ export declare type AbelianGroupSymbol = '+' | '-'; /** * @since 1.0.0 * @category Model */ export declare type LeftModuleSymbol = '.*'; /** * @since 1.0.0 * @category Model */ export declare type RightModuleSymbol = '*.'; /** * @since 1.0.0 * @category Model */ export declare type RingSymbol = AbelianGroupSymbol | '*'; /** * @since 1.0.0 * @category Model */ export declare type DivisionRingSymbol = RingSymbol | '/.' | './'; /** * @since 1.0.0 * @category Model */ export declare type EuclideanRingSymbol = RingSymbol | '/'; /** * @since 1.0.0 * @category Model */ export declare type FieldSymbol = EuclideanRingSymbol | '%'; /** * @since 1.0.0 * @category Model */ export declare type EqSymbol = '==' | '!='; /** * @since 1.0.0 * @category Model */ export declare type OrdSymbol = EqSymbol | '<' | '<=' | '>' | '>='; /** * Infix operators can sometimes be more convenient than using the full typeclass instance * * @since 1.0.0 * @example * import { makePolishInfix } from '@jacob-alford/matrix-ts/infix' * import * as H from '@jacob-alford/matrix-ts/quaternion' * * type QuatSymbol = '+' | '-' | '*' | '/' * * const _ = makePolishInfix({ * '+': H.DivisionRing.add, * '-': H.DivisionRing.sub, * '*': H.DivisionRing.mul, * '/': (x, y) => H.DivisionRing.mul(x, H.DivisionRing.recip(y)), * }) * * _('+', H.zero, H.zero) */ export declare const makePolishInfix: (fns: Readonly C>>) => (s: S, x: A, y: B) => C; /** * Infix operators can sometimes be more convenient than using the full typeclass instance * * @since 1.0.0 * @example * import { makeReversePolishInfix } from '@jacob-alford/matrix-ts/infix' * import * as H from '@jacob-alford/matrix-ts/quaternion' * * type QuatSymbol = '+' | '-' | '*' | '/' * * const _ = makeReversePolishInfix< * QuatSymbol, * H.Quaternion, * H.Quaternion, * H.Quaternion * >({ * '+': H.DivisionRing.add, * '-': H.DivisionRing.sub, * '*': H.DivisionRing.mul, * '/': (x, y) => H.DivisionRing.mul(x, H.DivisionRing.recip(y)), * }) * * _(H.zero, H.zero, '+') */ export declare const makeReversePolishInfix: (fns: Readonly C>>) => (x: A, y: B, s: S) => C; /** * Infix operators can sometimes be more convenient than using the full typeclass instance * * @since 1.0.0 * @example * import { makeInfix } from '@jacob-alford/matrix-ts/infix' * import * as H from '@jacob-alford/matrix-ts/quaternion' * * type QuatSymbol = '+' | '-' | '*' | '/' * * const _ = makeInfix({ * '+': H.DivisionRing.add, * '-': H.DivisionRing.sub, * '*': H.DivisionRing.mul, * '/': (x, y) => H.DivisionRing.mul(x, H.DivisionRing.recip(y)), * }) * * _(H.zero, '+', H.zero) */ export declare const makeInfix: (fns: Readonly C>>) => (x: A, s: S, y: B) => C; /** * @since 1.0.0 * @category Instances */ export declare const getAbGrpPolishInfix: (M: TC.AbelianGroup) => (s: AbelianGroupSymbol, x: A, y: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getAbGrpReversePolishInfix: (M: TC.AbelianGroup) => (a: A, b: A, s: AbelianGroupSymbol) => A; /** * @since 1.0.0 * @category Instances */ export declare const getAbGrpInfix: (M: TC.AbelianGroup) => (a: A, s: AbelianGroupSymbol, b: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getMonoidPolishInfix: (M: Mn.Monoid) => (s: MonoidSymbol, x: A, y: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getMonoidReversePolishInfix: (M: Mn.Monoid) => (a: A, b: A, s: "<>") => A; /** * @since 1.0.0 * @category Instances */ export declare const getMonoidInfix: (M: Mn.Monoid) => (a: A, s: "<>", b: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getRingPolishInfix: (F: Rng.Ring) => (s: RingSymbol, x: A, y: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getRingReversePolishInfix: (F: Rng.Ring) => (a: A, b: A, s: RingSymbol) => A; /** * @since 1.0.0 * @category Instances */ export declare const getRingInfix: (F: Rng.Ring) => (a: A, s: RingSymbol, b: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getEuclideanRingPolishInfix: (F: TC.EuclidianRing) => (s: EuclideanRingSymbol, x: A, y: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getEuclideanRingReversePolishInfix: (F: TC.EuclidianRing) => (a: A, b: A, s: EuclideanRingSymbol) => A; /** * @since 1.0.0 * @category Instances */ export declare const getEuclideanRingInfix: (F: TC.EuclidianRing) => (a: A, s: EuclideanRingSymbol, b: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getDivisionRingPolishInfix: (F: TC.DivisionRing) => (s: DivisionRingSymbol, x: A, y: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getDivisionRingReversePolishInfix: (F: TC.DivisionRing) => (a: A, b: A, s: DivisionRingSymbol) => A; /** * @since 1.0.0 * @category Instances */ export declare const getDivisionRingInfix: (F: TC.DivisionRing) => (a: A, s: DivisionRingSymbol, b: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getFieldPolishInfix: (F: Fld.Field) => (s: FieldSymbol, x: A, y: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getFieldReversePolishInfix: (F: Fld.Field) => (a: A, b: A, s: FieldSymbol) => A; /** * @since 1.0.0 * @category Instances */ export declare const getFieldInfix: (F: Fld.Field) => (a: A, s: FieldSymbol, b: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getEqPolishInfix: (E: Eq.Eq) => (s: EqSymbol, x: A, y: A) => boolean; /** * @since 1.0.0 * @category Instances */ export declare const getEqReversePolishInfix: (E: Eq.Eq) => (a: A, b: A, s: EqSymbol) => boolean; /** * @since 1.0.0 * @category Instances */ export declare const getEqInfix: (E: Eq.Eq) => (a: A, s: EqSymbol, b: A) => boolean; /** * @since 1.0.0 * @category Instances */ export declare const getOrdPolishInfix: (O: Ord.Ord) => (s: OrdSymbol, x: A, y: A) => boolean; /** * @since 1.0.0 * @category Instances */ export declare const getOrdReverseInfix: (O: Ord.Ord) => (a: A, b: A, s: OrdSymbol) => boolean; /** * @since 1.0.0 * @category Instances */ export declare const getOrdInfix: (O: Ord.Ord) => (a: A, s: OrdSymbol, b: A) => boolean; /** * @since 1.0.0 * @category Instances */ export declare const getLeftModulePolishInfix: (L: TC.LeftModule) => (s: LeftModuleSymbol, l: L, a: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getLeftModuleReversePolishInfix: (L: TC.LeftModule) => (a: L, b: A, s: ".*") => A; /** * @since 1.0.0 * @category Instances */ export declare const getLeftModuleInfix: (L: TC.LeftModule) => (a: L, s: ".*", b: A) => A; /** * @since 1.0.0 * @category Instances */ export declare const getRightModulePolishInfix: (L: TC.RightModule) => (s: RightModuleSymbol, a: A, r: R) => A; /** * @since 1.0.0 * @category Instances */ export declare const getRightModuleReversePolishInfix: (L: TC.RightModule) => (a: A, b: R, s: "*.") => A; /** * @since 1.0.0 * @category Instances */ export declare const getRightModuleInfix: (L: TC.LeftModule) => (a: L, s: ".*", b: A) => A; //# sourceMappingURL=infix.d.ts.map