From f724285d1d3cea85128069bcdf04e4c6af9c7a39 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sun, 10 Dec 2023 17:33:01 +0530 Subject: adds associativity for a=0 --- src/util.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/util.ts (limited to 'src/util.ts') diff --git a/src/util.ts b/src/util.ts new file mode 100644 index 0000000..5556f70 --- /dev/null +++ b/src/util.ts @@ -0,0 +1,31 @@ +export type Op = string | { op: string; a: Op; b: Op }; + +export type Rewrite = { + type: 'rewrite'; + left: left; + right: right; +}; + +export type Flip> = Rewrite; + +export type ApplyRewrite> = + O extends R['left'] ? R['right'] + : O extends string ? O + : O extends { a: Op, b: Op, op: string } ? ( + ApplyRewrite extends O['a'] + ? Omit & { b: ApplyRewrite } + : Omit & { a: ApplyRewrite } + ) + : never; + +// interface Kind { +// _: V; +// return: unknown; +// } +// type Ap = (K & { _: V })['return']; + +export type ChainRewrites[], O extends Op> = + Rws extends [] ? O + : Rws extends [infer R extends Rewrite, ...infer Rs extends Rewrite[]] + ? ChainRewrites> + : never; -- cgit v1.3.1