From 4a0fb237cac8796e45d7b217db0d808452454820 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 16 Dec 2023 17:31:12 +0530 Subject: feat: lambda calculus --- src/utils/theorem.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/utils/theorem.ts') diff --git a/src/utils/theorem.ts b/src/utils/theorem.ts index a4dd2e9..be19b94 100644 --- a/src/utils/theorem.ts +++ b/src/utils/theorem.ts @@ -6,9 +6,9 @@ export type OpToStr = O extends string ? O : O extends { op: string, a: infer a extends string, b: infer b extends string } ? `(${a} ${O['op']} ${b})` - : O extends { op: string, a: infer a extends DyadicOp, b: infer b extends string } ? `(${OpToStr} ${O['op']} ${b})` - : O extends { op: string, a: infer a extends string, b: infer b extends DyadicOp } ? `(${a} ${O['op']} ${OpToStr})` - : O extends { op: string, a: infer a extends DyadicOp, b: infer b extends DyadicOp } ? `(${OpToStr} ${O['op']} ${OpToStr})` + : O extends { op: string, a: infer a extends DyadicOp | MonadicOp, b: infer b extends string } ? `(${OpToStr} ${O['op']} ${b})` + : O extends { op: string, a: infer a extends string, b: infer b extends DyadicOp | MonadicOp } ? `(${a} ${O['op']} ${OpToStr})` + : O extends { op: string, a: infer a extends DyadicOp | MonadicOp, b: infer b extends DyadicOp | MonadicOp } ? `(${OpToStr} ${O['op']} ${OpToStr})` : O extends { op: string, a: infer a extends string } ? `${O['op']}(${a})` : O extends { op: string, a: infer a extends DyadicOp } ? `${O['op']}(${OpToStr})` : never; @@ -30,6 +30,7 @@ export interface Rewrite = Rewrite; export type Subst = Rewrite +export type SubstEq> = Rewrite export type ApplyRewrite = R['type'] extends 'imperative' ? (R & { left: O })['right'] -- cgit v1.3.1